1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.dialer.calllog; 18 19 import android.net.Uri; 20 import android.provider.ContactsContract; 21 import android.provider.ContactsContract.Contacts; 22 import android.provider.ContactsContract.PhoneLookup; 23 24 import com.android.contacts.common.compat.CompatUtils; 25 import com.android.contacts.common.compat.PhoneLookupSdkCompat; 26 import com.android.contacts.common.ContactsUtils; 27 28 /** 29 * The queries to look up the {@link ContactInfo} for a given number in the Call Log. 30 */ 31 final class PhoneQuery { 32 33 /** 34 * Projection to look up the ContactInfo. Does not include DISPLAY_NAME_ALTERNATIVE as that 35 * column isn't available in ContactsCommon.PhoneLookup. 36 * We should always use this projection starting from NYC onward. 37 */ 38 private static final String[] PHONE_LOOKUP_PROJECTION = new String[] { 39 PhoneLookupSdkCompat.CONTACT_ID, 40 PhoneLookup.DISPLAY_NAME, 41 PhoneLookup.TYPE, 42 PhoneLookup.LABEL, 43 PhoneLookup.NUMBER, 44 PhoneLookup.NORMALIZED_NUMBER, 45 PhoneLookup.PHOTO_ID, 46 PhoneLookup.LOOKUP_KEY, 47 PhoneLookup.PHOTO_URI 48 }; 49 50 /** 51 * Similar to {@link PHONE_LOOKUP_PROJECTION}. In pre-N, contact id is stored in 52 * {@link PhoneLookup#_ID} in non-sip query. 53 */ 54 private static final String[] BACKWARD_COMPATIBLE_NON_SIP_PHONE_LOOKUP_PROJECTION = 55 new String[] { 56 PhoneLookup._ID, 57 PhoneLookup.DISPLAY_NAME, 58 PhoneLookup.TYPE, 59 PhoneLookup.LABEL, 60 PhoneLookup.NUMBER, 61 PhoneLookup.NORMALIZED_NUMBER, 62 PhoneLookup.PHOTO_ID, 63 PhoneLookup.LOOKUP_KEY, 64 PhoneLookup.PHOTO_URI 65 }; 66 getPhoneLookupProjection(Uri phoneLookupUri)67 public static String[] getPhoneLookupProjection(Uri phoneLookupUri) { 68 if (CompatUtils.isNCompatible()) { 69 return PHONE_LOOKUP_PROJECTION; 70 } 71 // Pre-N 72 boolean isSip = phoneLookupUri.getBooleanQueryParameter( 73 ContactsContract.PhoneLookup.QUERY_PARAMETER_SIP_ADDRESS, false); 74 return (isSip) ? PHONE_LOOKUP_PROJECTION 75 : BACKWARD_COMPATIBLE_NON_SIP_PHONE_LOOKUP_PROJECTION; 76 } 77 78 public static final int PERSON_ID = 0; 79 public static final int NAME = 1; 80 public static final int PHONE_TYPE = 2; 81 public static final int LABEL = 3; 82 public static final int MATCHED_NUMBER = 4; 83 public static final int NORMALIZED_NUMBER = 5; 84 public static final int PHOTO_ID = 6; 85 public static final int LOOKUP_KEY = 7; 86 public static final int PHOTO_URI = 8; 87 88 /** 89 * Projection to look up a contact's DISPLAY_NAME_ALTERNATIVE 90 */ 91 public static final String[] DISPLAY_NAME_ALTERNATIVE_PROJECTION = new String[] { 92 Contacts.DISPLAY_NAME_ALTERNATIVE, 93 }; 94 95 public static final int NAME_ALTERNATIVE = 0; 96 } 97