Loading core/java/android/pim/ContactsAsyncHelper.java +64 −64 Original line number Diff line number Diff line Loading @@ -27,8 +27,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.provider.Contacts; import android.provider.Contacts.People; import android.provider.ContactsContract.Contacts; import android.util.Log; import android.view.View; import android.widget.ImageView; Loading Loading @@ -148,7 +147,7 @@ public class ContactsAsyncHelper extends Handler { */ public Uri getPhotoUri() { if (mCurrentCallerInfo != null) { return ContentUris.withAppendedId(People.CONTENT_URI, return ContentUris.withAppendedId(Contacts.CONTENT_URI, mCurrentCallerInfo.person_id); } return null; Loading Loading @@ -178,12 +177,13 @@ public class ContactsAsyncHelper extends Handler { super(looper); } @Override public void handleMessage(Message msg) { WorkerArgs args = (WorkerArgs) msg.obj; switch (msg.arg1) { case EVENT_LOAD_IMAGE: InputStream inputStream = Contacts.People.openContactPhotoInputStream( InputStream inputStream = Contacts.openContactPhotoInputStream( args.context.getContentResolver(), args.uri); if (inputStream != null) { args.result = Drawable.createFromStream(inputStream, args.uri.toString()); Loading core/java/android/provider/ContactsContract.java +55 −0 Original line number Diff line number Diff line Loading @@ -19,15 +19,21 @@ package android.provider; import android.accounts.Account; import android.content.ContentProviderClient; import android.content.ContentProviderOperation; import android.content.ContentResolver; import android.content.ContentUris; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.database.Cursor; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.RemoteException; import android.provider.ContactsContract.CommonDataKinds.GroupMembership; import android.text.TextUtils; import java.io.ByteArrayInputStream; import java.io.InputStream; /** * The contract between the contacts provider and applications. Contains definitions * for the supported URIs and columns. Loading Loading @@ -299,6 +305,55 @@ public final class ContactsContract { */ public static final String CONTENT_DIRECTORY = "suggestions"; } /** * Returns a URI that can be used to retrieve the contact's default photo. * * @param contactUri the contact whose photo should be used */ public static Uri getPhotoUri(ContentResolver cr, Uri contactUri) { long photoId = -1; Cursor cursor = cr.query(contactUri, new String[]{Contacts.PHOTO_ID}, null, null, null); try { if (!cursor.moveToNext()) { return null; } if (cursor.isNull(0)) { return null; } photoId = cursor.getLong(0); } finally { cursor.close(); } return ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, photoId); } /** * Opens an InputStream for the person's default photo and returns the * photo as a Bitmap stream. * * @param contactUri the contact whose photo should be used */ public static InputStream openContactPhotoInputStream(ContentResolver cr, Uri contactUri) { Uri photoUri = getPhotoUri(cr, contactUri); Cursor cursor = cr.query(photoUri, new String[]{ContactsContract.CommonDataKinds.Photo.PHOTO}, null, null, null); try { if (!cursor.moveToNext()) { return null; } byte[] data = cursor.getBlob(0); if (data == null) { return null; } return new ByteArrayInputStream(data); } finally { cursor.close(); } } } private interface RawContactsColumns { Loading telephony/java/com/android/internal/telephony/CallerInfo.java +11 −18 Original line number Diff line number Diff line Loading @@ -20,9 +20,8 @@ import android.content.Context; import android.database.Cursor; import android.graphics.drawable.Drawable; import android.net.Uri; import android.provider.Contacts; import android.provider.Contacts.People; import android.provider.Contacts.Phones; import android.provider.ContactsContract.PhoneLookup; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.text.TextUtils; import android.telephony.TelephonyManager; import android.telephony.PhoneNumberUtils; Loading Loading @@ -134,44 +133,39 @@ public class CallerInfo { int columnIndex; // Look for the name columnIndex = cursor.getColumnIndex(People.NAME); columnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME); if (columnIndex != -1) { info.name = cursor.getString(columnIndex); } // Look for the number columnIndex = cursor.getColumnIndex(Phones.NUMBER); columnIndex = cursor.getColumnIndex(PhoneLookup.NUMBER); if (columnIndex != -1) { info.phoneNumber = cursor.getString(columnIndex); } // Look for the label/type combo columnIndex = cursor.getColumnIndex(Phones.LABEL); columnIndex = cursor.getColumnIndex(PhoneLookup.LABEL); if (columnIndex != -1) { int typeColumnIndex = cursor.getColumnIndex(Phones.TYPE); int typeColumnIndex = cursor.getColumnIndex(PhoneLookup.TYPE); if (typeColumnIndex != -1) { info.numberType = cursor.getInt(typeColumnIndex); info.numberLabel = cursor.getString(columnIndex); info.phoneLabel = Contacts.Phones.getDisplayLabel(context, info.phoneLabel = Phone.getDisplayLabel(context, info.numberType, info.numberLabel) .toString(); } } // Look for the person ID columnIndex = cursor.getColumnIndex(Phones.PERSON_ID); columnIndex = cursor.getColumnIndex(PhoneLookup._ID); if (columnIndex != -1) { info.person_id = cursor.getLong(columnIndex); } else { columnIndex = cursor.getColumnIndex(People._ID); if (columnIndex != -1) { info.person_id = cursor.getLong(columnIndex); } } // look for the custom ringtone, create from the string stored // in the database. columnIndex = cursor.getColumnIndex(People.CUSTOM_RINGTONE); columnIndex = cursor.getColumnIndex(PhoneLookup.CUSTOM_RINGTONE); if ((columnIndex != -1) && (cursor.getString(columnIndex) != null)) { info.contactRingtoneUri = Uri.parse(cursor.getString(columnIndex)); } else { Loading @@ -180,7 +174,7 @@ public class CallerInfo { // look for the send to voicemail flag, set it to true only // under certain circumstances. columnIndex = cursor.getColumnIndex(People.SEND_TO_VOICEMAIL); columnIndex = cursor.getColumnIndex(PhoneLookup.SEND_TO_VOICEMAIL); info.shouldSendToVoicemail = (columnIndex != -1) && ((cursor.getInt(columnIndex)) == 1); info.contactExists = true; Loading Loading @@ -256,8 +250,7 @@ public class CallerInfo { } } Uri contactUri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, Uri.encode(number)); Uri contactUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, number); CallerInfo info = getCallerInfo(context, contactUri); Loading telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java +2 −2 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.provider.Contacts; import android.provider.ContactsContract.PhoneLookup; import android.telephony.PhoneNumberUtils; import android.telephony.TelephonyManager; import android.text.TextUtils; Loading Loading @@ -303,7 +303,7 @@ public class CallerInfoAsyncQuery { public static CallerInfoAsyncQuery startQuery(int token, Context context, String number, OnQueryCompleteListener listener, Object cookie) { //contruct the URI object and start Query. Uri contactRef = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, number); Uri contactRef = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, number); CallerInfoAsyncQuery c = new CallerInfoAsyncQuery(); c.allocate(context, contactRef); Loading Loading
core/java/android/pim/ContactsAsyncHelper.java +64 −64 Original line number Diff line number Diff line Loading @@ -27,8 +27,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.provider.Contacts; import android.provider.Contacts.People; import android.provider.ContactsContract.Contacts; import android.util.Log; import android.view.View; import android.widget.ImageView; Loading Loading @@ -148,7 +147,7 @@ public class ContactsAsyncHelper extends Handler { */ public Uri getPhotoUri() { if (mCurrentCallerInfo != null) { return ContentUris.withAppendedId(People.CONTENT_URI, return ContentUris.withAppendedId(Contacts.CONTENT_URI, mCurrentCallerInfo.person_id); } return null; Loading Loading @@ -178,12 +177,13 @@ public class ContactsAsyncHelper extends Handler { super(looper); } @Override public void handleMessage(Message msg) { WorkerArgs args = (WorkerArgs) msg.obj; switch (msg.arg1) { case EVENT_LOAD_IMAGE: InputStream inputStream = Contacts.People.openContactPhotoInputStream( InputStream inputStream = Contacts.openContactPhotoInputStream( args.context.getContentResolver(), args.uri); if (inputStream != null) { args.result = Drawable.createFromStream(inputStream, args.uri.toString()); Loading
core/java/android/provider/ContactsContract.java +55 −0 Original line number Diff line number Diff line Loading @@ -19,15 +19,21 @@ package android.provider; import android.accounts.Account; import android.content.ContentProviderClient; import android.content.ContentProviderOperation; import android.content.ContentResolver; import android.content.ContentUris; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.database.Cursor; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.RemoteException; import android.provider.ContactsContract.CommonDataKinds.GroupMembership; import android.text.TextUtils; import java.io.ByteArrayInputStream; import java.io.InputStream; /** * The contract between the contacts provider and applications. Contains definitions * for the supported URIs and columns. Loading Loading @@ -299,6 +305,55 @@ public final class ContactsContract { */ public static final String CONTENT_DIRECTORY = "suggestions"; } /** * Returns a URI that can be used to retrieve the contact's default photo. * * @param contactUri the contact whose photo should be used */ public static Uri getPhotoUri(ContentResolver cr, Uri contactUri) { long photoId = -1; Cursor cursor = cr.query(contactUri, new String[]{Contacts.PHOTO_ID}, null, null, null); try { if (!cursor.moveToNext()) { return null; } if (cursor.isNull(0)) { return null; } photoId = cursor.getLong(0); } finally { cursor.close(); } return ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, photoId); } /** * Opens an InputStream for the person's default photo and returns the * photo as a Bitmap stream. * * @param contactUri the contact whose photo should be used */ public static InputStream openContactPhotoInputStream(ContentResolver cr, Uri contactUri) { Uri photoUri = getPhotoUri(cr, contactUri); Cursor cursor = cr.query(photoUri, new String[]{ContactsContract.CommonDataKinds.Photo.PHOTO}, null, null, null); try { if (!cursor.moveToNext()) { return null; } byte[] data = cursor.getBlob(0); if (data == null) { return null; } return new ByteArrayInputStream(data); } finally { cursor.close(); } } } private interface RawContactsColumns { Loading
telephony/java/com/android/internal/telephony/CallerInfo.java +11 −18 Original line number Diff line number Diff line Loading @@ -20,9 +20,8 @@ import android.content.Context; import android.database.Cursor; import android.graphics.drawable.Drawable; import android.net.Uri; import android.provider.Contacts; import android.provider.Contacts.People; import android.provider.Contacts.Phones; import android.provider.ContactsContract.PhoneLookup; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.text.TextUtils; import android.telephony.TelephonyManager; import android.telephony.PhoneNumberUtils; Loading Loading @@ -134,44 +133,39 @@ public class CallerInfo { int columnIndex; // Look for the name columnIndex = cursor.getColumnIndex(People.NAME); columnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME); if (columnIndex != -1) { info.name = cursor.getString(columnIndex); } // Look for the number columnIndex = cursor.getColumnIndex(Phones.NUMBER); columnIndex = cursor.getColumnIndex(PhoneLookup.NUMBER); if (columnIndex != -1) { info.phoneNumber = cursor.getString(columnIndex); } // Look for the label/type combo columnIndex = cursor.getColumnIndex(Phones.LABEL); columnIndex = cursor.getColumnIndex(PhoneLookup.LABEL); if (columnIndex != -1) { int typeColumnIndex = cursor.getColumnIndex(Phones.TYPE); int typeColumnIndex = cursor.getColumnIndex(PhoneLookup.TYPE); if (typeColumnIndex != -1) { info.numberType = cursor.getInt(typeColumnIndex); info.numberLabel = cursor.getString(columnIndex); info.phoneLabel = Contacts.Phones.getDisplayLabel(context, info.phoneLabel = Phone.getDisplayLabel(context, info.numberType, info.numberLabel) .toString(); } } // Look for the person ID columnIndex = cursor.getColumnIndex(Phones.PERSON_ID); columnIndex = cursor.getColumnIndex(PhoneLookup._ID); if (columnIndex != -1) { info.person_id = cursor.getLong(columnIndex); } else { columnIndex = cursor.getColumnIndex(People._ID); if (columnIndex != -1) { info.person_id = cursor.getLong(columnIndex); } } // look for the custom ringtone, create from the string stored // in the database. columnIndex = cursor.getColumnIndex(People.CUSTOM_RINGTONE); columnIndex = cursor.getColumnIndex(PhoneLookup.CUSTOM_RINGTONE); if ((columnIndex != -1) && (cursor.getString(columnIndex) != null)) { info.contactRingtoneUri = Uri.parse(cursor.getString(columnIndex)); } else { Loading @@ -180,7 +174,7 @@ public class CallerInfo { // look for the send to voicemail flag, set it to true only // under certain circumstances. columnIndex = cursor.getColumnIndex(People.SEND_TO_VOICEMAIL); columnIndex = cursor.getColumnIndex(PhoneLookup.SEND_TO_VOICEMAIL); info.shouldSendToVoicemail = (columnIndex != -1) && ((cursor.getInt(columnIndex)) == 1); info.contactExists = true; Loading Loading @@ -256,8 +250,7 @@ public class CallerInfo { } } Uri contactUri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, Uri.encode(number)); Uri contactUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, number); CallerInfo info = getCallerInfo(context, contactUri); Loading
telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java +2 −2 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.provider.Contacts; import android.provider.ContactsContract.PhoneLookup; import android.telephony.PhoneNumberUtils; import android.telephony.TelephonyManager; import android.text.TextUtils; Loading Loading @@ -303,7 +303,7 @@ public class CallerInfoAsyncQuery { public static CallerInfoAsyncQuery startQuery(int token, Context context, String number, OnQueryCompleteListener listener, Object cookie) { //contruct the URI object and start Query. Uri contactRef = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, number); Uri contactRef = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, number); CallerInfoAsyncQuery c = new CallerInfoAsyncQuery(); c.allocate(context, contactRef); Loading