@Override public final void bindView(View view, Context context, Cursor cursor) { TextView name = (TextView) view.findViewById(R.id.name); name.setText(cursor.getString(NAME_INDEX)); TextView label = (TextView) view.findViewById(R.id.label); int type = cursor.getInt(TYPE_INDEX); if (cursor.getColumnCount() == EMAIL_COLUMN_COUNT) { int kind = cursor.getInt(KIND_INDEX); label.setText(ContactMethods.getDisplayLabel( mContext, kind, type, cursor.getString(LABEL_INDEX))); } else { label.setText(Phones.getDisplayLabel(mContext, type, cursor.getString(LABEL_INDEX))); } TextView number = (TextView) view.findViewById(R.id.number); number.setText("(" + cursor.getString(NUMBER_INDEX) + ")"); }
@Override public Cursor runQueryOnBackgroundThread(CharSequence constraint) { String where = null; if (constraint != null) { String filter = DatabaseUtils.sqlEscapeString(constraint.toString() + '%'); StringBuilder s = new StringBuilder(); s.append("(people.name LIKE "); s.append(filter); s.append(") OR (contact_methods.data LIKE "); s.append(filter); s.append(")"); where = s.toString(); } return contentResolver.query(ContactMethods.CONTENT_EMAIL_URI, PROJECTION, where, null, SORT_ORDER); }
public void onAddressGeocodeFound(GeoPoint geoPoint) { addOverlayItem(overlayItems, personId, geoPoint.getLatitudeE6(), geoPoint.getLongitudeE6(), mContactData); mContactData = null; if(mContactMethodPostalCursor.moveToNext()){ mContactData = mContactMethodPostalCursor.getString(ContactMethodProjectionGps.CONTACT_M_DATA_INDEX); Uri postalContactMethodUri = ContentUris.withAppendedId(ContactMethods.CONTENT_URI, mContactMethodPostalCursor.getInt(ContactMethodProjectionGps.CONTACT_M_ID_INDEX)); mGeocodeAddressPart.resolveAddressPosition(mContactData, postalContactMethodUri, this); }else{ mContactMethodPostalCursor.close(); personId = -1l; if(itr.hasNext()){ resolveForPerson(overlayItems); }else{ mListener.onOverlayItemsResolved(overlayItems); } } }
/** * Checks whether the contact refered to by the URI contains any postal contact methods. * Postal contact methods usually can be geocoded and thus can be used for proximity alerts. * * @param uri A android.provider.Contacts.People.CONTENT_URI with id. * @return */ protected static boolean doesContactUriContainLocationInfoSDK3(Context ctx, Uri uri) throws RuntimeException { Long personId = ContentUris.parseId(uri); if( personId < 0 ){ // Whoops, bad data! Bail. Exception exp = (Exception)(new Exception("URI missing id.").fillInStackTrace()); Log.e(TAG, "ERR0003F URI missing id."); ErrorUtil.handleExceptionNotifyUserAndThrow("ERR0003F", exp, ctx); } // ****************************************************** // Find the postal address that the user wants to use // ****************************************************** // Get a list of the postal addresses Cursor mContactMethodPostalCursor = ctx.getContentResolver().query(ContactMethods.CONTENT_URI, ContactMethodProjectionGps.CONTACT_METHODS_PROJECTION, ContactMethods.PERSON_ID+"=? AND "+ContactMethodsColumns.KIND+"=?", new String[]{personId.toString(), String.valueOf(Contacts.KIND_POSTAL)}, null); int count = mContactMethodPostalCursor.getCount(); mContactMethodPostalCursor.close(); // Zero postal addresses if( count < 1){ // No postal addresses exist, so no GPS locations can exist, right? return false; } return true; }
private void resolveForPerson(ArrayList<OverlayItem> overlayItems) { personId = ContentUris.parseId(itr.next()); if( personId < 0 ){ // Whoops, bad data! Bail. Exception exp = (Exception)(new Exception("Missing or incomplete Contacts.People.CONTENT_URI.").fillInStackTrace()); Log.e(TAG, "ERR0001H", exp); ErrorUtil.handleExceptionNotifyUserAndThrow("ERR0001H", exp, mContext); } // ****************************************************** // Find the postal address that the user wants to use // ****************************************************** // Get a list of the postal addresses mContactMethodPostalCursor = mContext.getContentResolver().query(ContactMethods.CONTENT_URI, ContactMethodProjectionGps.CONTACT_METHODS_PROJECTION, // TODO: This won't work for Androic 2.x and above phones. ContactMethods.PERSON_ID+"=? AND "+ContactMethodsColumns.KIND+"=?", new String[]{personId.toString(), String.valueOf(Contacts.KIND_POSTAL)}, null); if(mContactMethodPostalCursor.moveToNext()){ Uri postalContactMethodUri = ContentUris.withAppendedId(ContactMethods.CONTENT_URI, mContactMethodPostalCursor.getInt(ContactMethodProjectionGps.CONTACT_M_ID_INDEX)); mContactData = mContactMethodPostalCursor.getString(ContactMethodProjectionGps.CONTACT_M_DATA_INDEX); mGeocodeAddressPart.resolveAddressPosition(mContactData, postalContactMethodUri, this); }else{ mContactMethodPostalCursor.close(); personId = -1l; if(itr.hasNext()){ resolveForPerson(overlayItems); }else{ mListener.onOverlayItemsResolved(overlayItems); } } }
protected Uri constructReturnData(Long personId, Long contactMethodId){ Builder builder = ContentUris.appendId(Contacts.People.CONTENT_URI.buildUpon(), personId); builder.appendPath(Contacts.People.ContactMethods.CONTENT_DIRECTORY); builder.appendPath(contactMethodId.toString()); Uri returnData = builder.build(); return returnData; }
@Override public Cursor runQueryOnBackgroundThread(CharSequence constraint) { String where = null; android.net.Uri db = null; StringBuilder s = new StringBuilder(); if (constraint != null) { String filter = DatabaseUtils.sqlEscapeString(constraint.toString() + '%'); if (SdkLevel.getLevel() >= SdkLevel.LEVEL_HONEYCOMB_MR1) { db = HoneycombMR1Util.getDataContentUri(); s.append("(" + HoneycombMR1Util.getDataMimeType() + "='" + HoneycombMR1Util.getEmailType() + "')"); s.append(" AND "); s.append("(display_name LIKE "); s.append(filter); s.append(")"); } else { db = ContactMethods.CONTENT_EMAIL_URI; s.append("(name LIKE "); s.append(filter); s.append(") OR (display_name LIKE "); s.append(filter); s.append(")"); } } where = s.toString(); // Note(hal): This lists the column names in the table being accessed, since they aren't // obvious to me from the documentation if (DEBUG) { Cursor c = context.getContentResolver().query(db, null, null, null, null, null); Log.d(TAG, "listing columns"); for (int i = 0; i<c.getColumnCount(); i++) { Log.d(TAG, "column " + i + "=" + c.getColumnName(i)); } } if (SdkLevel.getLevel() >= SdkLevel.LEVEL_HONEYCOMB_MR1) { return contentResolver.query(db, POST_HONEYCOMB_PROJECTION, where, null, SORT_ORDER); } else { return contentResolver.query(db, PRE_HONEYCOMB_PROJECTION, where, null, SORT_ORDER); } }
public static CharSequence determineContactMethodLabel(Context context, int kind, int type, String otherLabel) { CharSequence returnLabel = ContactMethods.getDisplayLabel(context, kind, type, otherLabel); return returnLabel; }
@TargetApi(Build.VERSION_CODES.ECLAIR) private String getPrimaryEmail(final long personId, final String number) { if (personId <= 0) { return getUnknownEmail(number); } String primaryEmail = null; // Get all e-mail addresses for that person. Cursor c; int columnIndex; if (NEW_CONTACT_API) { c = mContext.getContentResolver().query( ECLAIR_CONTENT_URI, new String[] { ContactsContract.CommonDataKinds.Email.DATA }, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[] { String.valueOf(personId) }, ContactsContract.CommonDataKinds.Email.IS_PRIMARY + " DESC"); columnIndex = c != null ? c.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA) : -1; } else { c = mContext.getContentResolver().query( ContactMethods.CONTENT_EMAIL_URI, new String[] { ContactMethods.DATA }, ContactMethods.PERSON_ID + " = ?", new String[] { String.valueOf(personId) }, ContactMethods.ISPRIMARY + " DESC"); columnIndex = c!= null ? c.getColumnIndex(ContactMethods.DATA) : -1; } // Loop over cursor and find a Gmail address for that person. // If there is none, pick first e-mail address. while (c != null && c.moveToNext()) { String e = c.getString(columnIndex); if (primaryEmail == null) { primaryEmail = e; } if (isGmailAddress(e)) { primaryEmail = e; break; } } if (c != null) c.close(); return (primaryEmail != null) ? primaryEmail : getUnknownEmail(number); }