Loading InCallUI/src/com/android/incallui/CallerInfo.java +33 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.incallui; import com.android.dialer.util.PhoneLookupUtil; import com.google.common.primitives.Longs; import android.content.Context; Loading @@ -32,6 +33,8 @@ import android.provider.ContactsContract.RawContacts; import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import com.android.contacts.common.compat.CompatUtils; import com.android.contacts.common.compat.PhoneLookupSdkCompat; import com.android.contacts.common.ContactsUtils; import com.android.contacts.common.ContactsUtils.UserType; import com.android.contacts.common.util.PhoneNumberHelper; Loading @@ -44,7 +47,23 @@ import com.android.dialer.calllog.ContactInfoHelper; public class CallerInfo { private static final String TAG = "CallerInfo"; public static final String[] DEFAULT_PHONELOOKUP_PROJECTION = new String[] { // We should always use this projection starting from NYC onward. private static final String[] DEFAULT_PHONELOOKUP_PROJECTION = new String[] { PhoneLookupSdkCompat.CONTACT_ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.LOOKUP_KEY, PhoneLookup.NUMBER, PhoneLookup.NORMALIZED_NUMBER, PhoneLookup.LABEL, PhoneLookup.TYPE, PhoneLookup.PHOTO_URI, PhoneLookup.CUSTOM_RINGTONE, PhoneLookup.SEND_TO_VOICEMAIL }; // In pre-N, contact id is stored in {@link PhoneLookup._ID} in non-sip query. private static final String[] BACKWARD_COMPATIBLE_NON_SIP_DEFAULT_PHONELOOKUP_PROJECTION = new String[] { PhoneLookup._ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.LOOKUP_KEY, Loading @@ -57,6 +76,17 @@ public class CallerInfo { PhoneLookup.SEND_TO_VOICEMAIL }; public static String[] getDefaultPhoneLookupProjection(Uri phoneLookupUri) { if (CompatUtils.isNCompatible()) { return DEFAULT_PHONELOOKUP_PROJECTION; } // Pre-N boolean isSip = phoneLookupUri.getBooleanQueryParameter( ContactsContract.PhoneLookup.QUERY_PARAMETER_SIP_ADDRESS, false); return (isSip) ? DEFAULT_PHONELOOKUP_PROJECTION : BACKWARD_COMPATIBLE_NON_SIP_DEFAULT_PHONELOOKUP_PROJECTION; } /** * Please note that, any one of these member variables can be null, * and any accesses to them should be prepared to handle such a case. Loading Loading @@ -480,7 +510,7 @@ public class CallerInfo { // for phone numbers. // MIME type: PhoneLookup.CONTENT_TYPE (= "vnd.android.cursor.dir/phone_lookup") Log.v(TAG, "'phone_lookup' URI; using PhoneLookup._ID"); columnName = PhoneLookup._ID; columnName = PhoneLookupUtil.getContactIdColumnNameForUri(contactRef); } else { Log.v(TAG, "Unexpected prefix for contactRef '" + url + "'"); } Loading InCallUI/src/com/android/incallui/CallerInfoAsyncQuery.java +8 −6 Original line number Diff line number Diff line Loading @@ -407,10 +407,12 @@ public class CallerInfoAsyncQuery { cw.event = EVENT_NEW_QUERY; } String[] proejection = CallerInfo.getDefaultPhoneLookupProjection(contactRef); c.mHandler.startQuery(token, cw, // cookie contactRef, // uri CallerInfo.DEFAULT_PHONELOOKUP_PROJECTION, // projection proejection, // projection null, // selection null, // selectionArgs null); // orderBy Loading src/com/android/dialer/calllog/ContactInfoHelper.java +1 −2 Original line number Diff line number Diff line Loading @@ -164,8 +164,7 @@ public class ContactInfoHelper { Cursor phoneLookupCursor = null; try { String[] projection = (isSip) ? PhoneQuery.SIP_PHONE_LOOKUP_PROJECTION : PhoneQuery.PHONE_LOOKUP_PROJECTION; String[] projection = PhoneQuery.getPhoneLookupProjection(uri); phoneLookupCursor = mContext.getContentResolver().query(uri, projection, null, null, null); } catch (NullPointerException e) { Loading src/com/android/dialer/calllog/PhoneQuery.java +35 −18 Original line number Diff line number Diff line Loading @@ -16,10 +16,15 @@ package com.android.dialer.calllog; import android.net.Uri; import android.provider.ContactsContract; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.PhoneLookup; import com.android.contacts.common.compat.CompatUtils; import com.android.contacts.common.compat.PhoneLookupSdkCompat; import com.android.contacts.common.ContactsUtils; /** * The queries to look up the {@link ContactInfo} for a given number in the Call Log. */ Loading @@ -27,10 +32,11 @@ final class PhoneQuery { /** * Projection to look up the ContactInfo. Does not include DISPLAY_NAME_ALTERNATIVE as that * column isn't available in ContactsCommon.PhoneLookup * column isn't available in ContactsCommon.PhoneLookup. * We should always use this projection starting from NYC onward. */ public static final String[] PHONE_LOOKUP_PROJECTION = new String[] { PhoneLookup._ID, private static final String[] PHONE_LOOKUP_PROJECTION = new String[] { PhoneLookupSdkCompat.CONTACT_ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.TYPE, PhoneLookup.LABEL, Loading @@ -42,12 +48,12 @@ final class PhoneQuery { }; /** * Similar to {@link PHONE_LOOKUP_PROJECTION}. Due to a bug in framework, the column name of * contact id in normal phonelookup query is _id, but that in sip phonelookup query is * contact_id. * Similar to {@link PHONE_LOOKUP_PROJECTION}. In pre-N, contact id is stored in * {@link PhoneLookup#_ID} in non-sip query. */ public static final String[] SIP_PHONE_LOOKUP_PROJECTION = new String[] { Data.CONTACT_ID, private static final String[] BACKWARD_COMPATIBLE_NON_SIP_PHONE_LOOKUP_PROJECTION = new String[] { PhoneLookup._ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.TYPE, PhoneLookup.LABEL, Loading @@ -58,6 +64,17 @@ final class PhoneQuery { PhoneLookup.PHOTO_URI }; public static String[] getPhoneLookupProjection(Uri phoneLookupUri) { if (CompatUtils.isNCompatible()) { return PHONE_LOOKUP_PROJECTION; } // Pre-N boolean isSip = phoneLookupUri.getBooleanQueryParameter( ContactsContract.PhoneLookup.QUERY_PARAMETER_SIP_ADDRESS, false); return (isSip) ? PHONE_LOOKUP_PROJECTION : BACKWARD_COMPATIBLE_NON_SIP_PHONE_LOOKUP_PROJECTION; } public static final int PERSON_ID = 0; public static final int NAME = 1; public static final int PHONE_TYPE = 2; Loading src/com/android/dialer/util/PhoneLookupUtil.java 0 → 100644 +40 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.dialer.util; import android.net.Uri; import android.provider.ContactsContract; import com.android.contacts.common.compat.CompatUtils; import com.android.contacts.common.compat.PhoneLookupSdkCompat; public final class PhoneLookupUtil { /** * @return the column name that stores contact id for phone lookup query. */ public static String getContactIdColumnNameForUri(Uri phoneLookupUri) { if (CompatUtils.isNCompatible()) { return PhoneLookupSdkCompat.CONTACT_ID; } // In pre-N, contact id is stored in {@link PhoneLookup#_ID} in non-sip query. boolean isSip = phoneLookupUri.getBooleanQueryParameter( ContactsContract.PhoneLookup.QUERY_PARAMETER_SIP_ADDRESS, false); return (isSip) ? PhoneLookupSdkCompat.CONTACT_ID : ContactsContract.PhoneLookup._ID; } private PhoneLookupUtil() {} } Loading
InCallUI/src/com/android/incallui/CallerInfo.java +33 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.incallui; import com.android.dialer.util.PhoneLookupUtil; import com.google.common.primitives.Longs; import android.content.Context; Loading @@ -32,6 +33,8 @@ import android.provider.ContactsContract.RawContacts; import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import com.android.contacts.common.compat.CompatUtils; import com.android.contacts.common.compat.PhoneLookupSdkCompat; import com.android.contacts.common.ContactsUtils; import com.android.contacts.common.ContactsUtils.UserType; import com.android.contacts.common.util.PhoneNumberHelper; Loading @@ -44,7 +47,23 @@ import com.android.dialer.calllog.ContactInfoHelper; public class CallerInfo { private static final String TAG = "CallerInfo"; public static final String[] DEFAULT_PHONELOOKUP_PROJECTION = new String[] { // We should always use this projection starting from NYC onward. private static final String[] DEFAULT_PHONELOOKUP_PROJECTION = new String[] { PhoneLookupSdkCompat.CONTACT_ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.LOOKUP_KEY, PhoneLookup.NUMBER, PhoneLookup.NORMALIZED_NUMBER, PhoneLookup.LABEL, PhoneLookup.TYPE, PhoneLookup.PHOTO_URI, PhoneLookup.CUSTOM_RINGTONE, PhoneLookup.SEND_TO_VOICEMAIL }; // In pre-N, contact id is stored in {@link PhoneLookup._ID} in non-sip query. private static final String[] BACKWARD_COMPATIBLE_NON_SIP_DEFAULT_PHONELOOKUP_PROJECTION = new String[] { PhoneLookup._ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.LOOKUP_KEY, Loading @@ -57,6 +76,17 @@ public class CallerInfo { PhoneLookup.SEND_TO_VOICEMAIL }; public static String[] getDefaultPhoneLookupProjection(Uri phoneLookupUri) { if (CompatUtils.isNCompatible()) { return DEFAULT_PHONELOOKUP_PROJECTION; } // Pre-N boolean isSip = phoneLookupUri.getBooleanQueryParameter( ContactsContract.PhoneLookup.QUERY_PARAMETER_SIP_ADDRESS, false); return (isSip) ? DEFAULT_PHONELOOKUP_PROJECTION : BACKWARD_COMPATIBLE_NON_SIP_DEFAULT_PHONELOOKUP_PROJECTION; } /** * Please note that, any one of these member variables can be null, * and any accesses to them should be prepared to handle such a case. Loading Loading @@ -480,7 +510,7 @@ public class CallerInfo { // for phone numbers. // MIME type: PhoneLookup.CONTENT_TYPE (= "vnd.android.cursor.dir/phone_lookup") Log.v(TAG, "'phone_lookup' URI; using PhoneLookup._ID"); columnName = PhoneLookup._ID; columnName = PhoneLookupUtil.getContactIdColumnNameForUri(contactRef); } else { Log.v(TAG, "Unexpected prefix for contactRef '" + url + "'"); } Loading
InCallUI/src/com/android/incallui/CallerInfoAsyncQuery.java +8 −6 Original line number Diff line number Diff line Loading @@ -407,10 +407,12 @@ public class CallerInfoAsyncQuery { cw.event = EVENT_NEW_QUERY; } String[] proejection = CallerInfo.getDefaultPhoneLookupProjection(contactRef); c.mHandler.startQuery(token, cw, // cookie contactRef, // uri CallerInfo.DEFAULT_PHONELOOKUP_PROJECTION, // projection proejection, // projection null, // selection null, // selectionArgs null); // orderBy Loading
src/com/android/dialer/calllog/ContactInfoHelper.java +1 −2 Original line number Diff line number Diff line Loading @@ -164,8 +164,7 @@ public class ContactInfoHelper { Cursor phoneLookupCursor = null; try { String[] projection = (isSip) ? PhoneQuery.SIP_PHONE_LOOKUP_PROJECTION : PhoneQuery.PHONE_LOOKUP_PROJECTION; String[] projection = PhoneQuery.getPhoneLookupProjection(uri); phoneLookupCursor = mContext.getContentResolver().query(uri, projection, null, null, null); } catch (NullPointerException e) { Loading
src/com/android/dialer/calllog/PhoneQuery.java +35 −18 Original line number Diff line number Diff line Loading @@ -16,10 +16,15 @@ package com.android.dialer.calllog; import android.net.Uri; import android.provider.ContactsContract; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.PhoneLookup; import com.android.contacts.common.compat.CompatUtils; import com.android.contacts.common.compat.PhoneLookupSdkCompat; import com.android.contacts.common.ContactsUtils; /** * The queries to look up the {@link ContactInfo} for a given number in the Call Log. */ Loading @@ -27,10 +32,11 @@ final class PhoneQuery { /** * Projection to look up the ContactInfo. Does not include DISPLAY_NAME_ALTERNATIVE as that * column isn't available in ContactsCommon.PhoneLookup * column isn't available in ContactsCommon.PhoneLookup. * We should always use this projection starting from NYC onward. */ public static final String[] PHONE_LOOKUP_PROJECTION = new String[] { PhoneLookup._ID, private static final String[] PHONE_LOOKUP_PROJECTION = new String[] { PhoneLookupSdkCompat.CONTACT_ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.TYPE, PhoneLookup.LABEL, Loading @@ -42,12 +48,12 @@ final class PhoneQuery { }; /** * Similar to {@link PHONE_LOOKUP_PROJECTION}. Due to a bug in framework, the column name of * contact id in normal phonelookup query is _id, but that in sip phonelookup query is * contact_id. * Similar to {@link PHONE_LOOKUP_PROJECTION}. In pre-N, contact id is stored in * {@link PhoneLookup#_ID} in non-sip query. */ public static final String[] SIP_PHONE_LOOKUP_PROJECTION = new String[] { Data.CONTACT_ID, private static final String[] BACKWARD_COMPATIBLE_NON_SIP_PHONE_LOOKUP_PROJECTION = new String[] { PhoneLookup._ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.TYPE, PhoneLookup.LABEL, Loading @@ -58,6 +64,17 @@ final class PhoneQuery { PhoneLookup.PHOTO_URI }; public static String[] getPhoneLookupProjection(Uri phoneLookupUri) { if (CompatUtils.isNCompatible()) { return PHONE_LOOKUP_PROJECTION; } // Pre-N boolean isSip = phoneLookupUri.getBooleanQueryParameter( ContactsContract.PhoneLookup.QUERY_PARAMETER_SIP_ADDRESS, false); return (isSip) ? PHONE_LOOKUP_PROJECTION : BACKWARD_COMPATIBLE_NON_SIP_PHONE_LOOKUP_PROJECTION; } public static final int PERSON_ID = 0; public static final int NAME = 1; public static final int PHONE_TYPE = 2; Loading
src/com/android/dialer/util/PhoneLookupUtil.java 0 → 100644 +40 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.dialer.util; import android.net.Uri; import android.provider.ContactsContract; import com.android.contacts.common.compat.CompatUtils; import com.android.contacts.common.compat.PhoneLookupSdkCompat; public final class PhoneLookupUtil { /** * @return the column name that stores contact id for phone lookup query. */ public static String getContactIdColumnNameForUri(Uri phoneLookupUri) { if (CompatUtils.isNCompatible()) { return PhoneLookupSdkCompat.CONTACT_ID; } // In pre-N, contact id is stored in {@link PhoneLookup#_ID} in non-sip query. boolean isSip = phoneLookupUri.getBooleanQueryParameter( ContactsContract.PhoneLookup.QUERY_PARAMETER_SIP_ADDRESS, false); return (isSip) ? PhoneLookupSdkCompat.CONTACT_ID : ContactsContract.PhoneLookup._ID; } private PhoneLookupUtil() {} }