Fix http://b/issue?id=2086484 and http://b/issue?id=2087539
Change-Id: I392e52ac821a2eabd40c26024dbc587e6e63236f
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index a578576..c142182 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -221,7 +221,8 @@
Contacts.STARRED, //2
Contacts.TIMES_CONTACTED, //3
Presence.PRESENCE_STATUS, //4
- Contacts.PHOTO_ID, //4
+ Contacts.PHOTO_ID, //5
+ Contacts.HAS_PHONE_NUMBER, //6
};
static final String[] LEGACY_PEOPLE_PROJECTION = new String[] {
People._ID, // 0
@@ -236,6 +237,7 @@
static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 3;
static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 4;
static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 5;
+ static final int SUMMARY_HAS_PHONE_COLUMN_INDEX = 6;
static final String[] PHONES_PROJECTION = new String[] {
Data._ID, //0
@@ -882,14 +884,16 @@
return;
}
long id = info.id;
- Uri aggUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, id);
+ Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, id);
+ long rawContactId = ContactsUtils.queryForRawContactId(getContentResolver(), id);
+ Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
// Setup the menu header
menu.setHeaderTitle(cursor.getString(SUMMARY_NAME_COLUMN_INDEX));
// View contact details
menu.add(0, MENU_ITEM_VIEW_CONTACT, 0, R.string.menu_viewContact)
- .setIntent(new Intent(Intent.ACTION_VIEW, aggUri));
+ .setIntent(new Intent(Intent.ACTION_VIEW, contactUri));
/*
// Calling contact
@@ -923,7 +927,7 @@
// Contact editing
menu.add(0, MENU_ITEM_EDIT, 0, R.string.menu_editContact)
- .setIntent(new Intent(Intent.ACTION_EDIT, aggUri));
+ .setIntent(new Intent(Intent.ACTION_EDIT, rawContactUri));
menu.add(0, MENU_ITEM_DELETE, 0, R.string.menu_deleteContact);
}
@@ -1583,14 +1587,22 @@
if (list.hasFocus()) {
Cursor cursor = (Cursor) list.getSelectedItem();
if (cursor != null) {
- long dataId = cursor.getLong(ID_COLUMN_INDEX);
- if (dataId == 0) {
+ boolean hasPhone = cursor.getInt(SUMMARY_HAS_PHONE_COLUMN_INDEX) != 0;
+ if (!hasPhone) {
// There is no phone number.
signalError();
return false;
}
- Uri uri = ContentUris.withAppendedId(Data.CONTENT_URI, dataId);
- Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED, uri);
+
+ String phone = ContactsUtils.querySuperPrimaryPhone(getContentResolver(), cursor.
+ getLong(ID_COLUMN_INDEX));
+ if (phone == null) {
+ signalError();
+ return false;
+ }
+
+ Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
+ Uri.fromParts("tel", phone, null));
startActivity(intent);
return true;
}
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
index 7611026..76f885e 100644
--- a/src/com/android/contacts/ContactsUtils.java
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -21,6 +21,8 @@
import com.android.contacts.ui.FastTrackWindow;
import java.io.ByteArrayInputStream;
+
+import android.provider.Contacts.People.Phones;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
@@ -36,15 +38,13 @@
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import android.graphics.drawable.Drawable;
-import android.provider.Contacts;
-import android.provider.Contacts.Photos;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.Contacts;
import android.provider.Im.ProviderNames;
import android.database.Cursor;
import android.text.TextUtils;
@@ -260,6 +260,49 @@
return contactId;
}
+ public static String querySuperPrimaryPhone(ContentResolver cr, long contactId) {
+ Cursor c = null;
+ String phone = null;
+ try {
+ Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
+ Uri dataUri = Uri.withAppendedPath(baseUri, "data");
+
+ c = cr.query(dataUri,
+ new String[] {Phone.NUMBER},
+ Data.MIMETYPE + "=" + Phone.MIMETYPE +
+ " AND " + Data.IS_SUPER_PRIMARY + "=1",
+ null, null);
+ if (c != null && c.moveToFirst()) {
+ // Just return the first one.
+ phone = c.getString(0);
+ }
+ } finally {
+ if (c != null) {
+ c.close();
+ }
+ }
+ return phone;
+ }
+
+ public static long queryForRawContactId(ContentResolver cr, long contactId) {
+ Cursor rawContactIdCursor = null;
+ long rawContactId = -1;
+ try {
+ rawContactIdCursor = cr.query(RawContacts.CONTENT_URI,
+ new String[] {RawContacts._ID},
+ RawContacts.CONTACT_ID + "=" + contactId, null, null);
+ if (rawContactIdCursor != null && rawContactIdCursor.moveToFirst()) {
+ // Just return the first one.
+ rawContactId = rawContactIdCursor.getLong(0);
+ }
+ } finally {
+ if (rawContactIdCursor != null) {
+ rawContactIdCursor.close();
+ }
+ }
+ return rawContactId;
+ }
+
/**
* Utility for creating a standard tab indicator view.