1 /*
2  * Copyright (C) 2006 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 android.provider;
18 
19 import com.android.internal.R;
20 
21 import android.annotation.SdkConstant;
22 import android.annotation.SdkConstant.SdkConstantType;
23 import android.content.ContentResolver;
24 import android.content.ContentUris;
25 import android.content.ContentValues;
26 import android.content.Context;
27 import android.database.Cursor;
28 import android.graphics.Bitmap;
29 import android.graphics.BitmapFactory;
30 import android.net.Uri;
31 import android.text.TextUtils;
32 import android.util.Log;
33 import android.widget.ImageView;
34 
35 import java.io.ByteArrayInputStream;
36 import java.io.InputStream;
37 
38 /**
39  * The Contacts provider stores all information about contacts.
40  *
41  * @deprecated The APIs have been superseded by {@link ContactsContract}. The newer APIs allow
42  * access multiple accounts and support aggregation of similar contacts. These APIs continue to
43  * work but will only return data for the first Google account created, which matches the original
44  * behavior.
45  */
46 @Deprecated
47 public class Contacts {
48     private static final String TAG = "Contacts";
49 
50     /**
51      * @deprecated see {@link android.provider.ContactsContract}
52      */
53     @Deprecated
54     public static final String AUTHORITY = "contacts";
55 
56     /**
57      * The content:// style URL for this provider
58      * @deprecated see {@link android.provider.ContactsContract}
59      */
60     @Deprecated
61     public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
62 
63     /**
64      * Signifies an email address row that is stored in the ContactMethods table
65      * @deprecated see {@link android.provider.ContactsContract}
66      */
67     @Deprecated
68     public static final int KIND_EMAIL = 1;
69     /**
70      * Signifies a postal address row that is stored in the ContactMethods table
71      * @deprecated see {@link android.provider.ContactsContract}
72      */
73     @Deprecated
74     public static final int KIND_POSTAL = 2;
75     /**
76      * Signifies an IM address row that is stored in the ContactMethods table
77      * @deprecated see {@link android.provider.ContactsContract}
78      */
79     @Deprecated
80     public static final int KIND_IM = 3;
81     /**
82      * Signifies an Organization row that is stored in the Organizations table
83      * @deprecated see {@link android.provider.ContactsContract}
84      */
85     @Deprecated
86     public static final int KIND_ORGANIZATION = 4;
87     /**
88      * Signifies a Phone row that is stored in the Phones table
89      * @deprecated see {@link android.provider.ContactsContract}
90      */
91     @Deprecated
92     public static final int KIND_PHONE = 5;
93 
94     /**
95      * no public constructor since this is a utility class
96      */
Contacts()97     private Contacts() {}
98 
99     /**
100      * Columns from the Settings table that other columns join into themselves.
101      * @deprecated see {@link android.provider.ContactsContract}
102      */
103     @Deprecated
104     public interface SettingsColumns {
105         /**
106          * The _SYNC_ACCOUNT to which this setting corresponds. This may be null.
107          * <P>Type: TEXT</P>
108          * @deprecated see {@link android.provider.ContactsContract}
109          */
110         @Deprecated
111         public static final String _SYNC_ACCOUNT = "_sync_account";
112 
113         /**
114          * The _SYNC_ACCOUNT_TYPE to which this setting corresponds. This may be null.
115          * <P>Type: TEXT</P>
116          * @deprecated see {@link android.provider.ContactsContract}
117          */
118         @Deprecated
119         public static final String _SYNC_ACCOUNT_TYPE = "_sync_account_type";
120 
121         /**
122          * The key of this setting.
123          * <P>Type: TEXT</P>
124          * @deprecated see {@link android.provider.ContactsContract}
125          */
126         @Deprecated
127         public static final String KEY = "key";
128 
129         /**
130          * The value of this setting.
131          * <P>Type: TEXT</P>
132          * @deprecated see {@link android.provider.ContactsContract}
133          */
134         @Deprecated
135         public static final String VALUE = "value";
136     }
137 
138     /**
139      * The settings over all of the people
140      * @deprecated see {@link android.provider.ContactsContract}
141      */
142     @Deprecated
143     public static final class Settings implements BaseColumns, SettingsColumns {
144         /**
145          * no public constructor since this is a utility class
146          */
Settings()147         private Settings() {}
148 
149         /**
150          * The content:// style URL for this table
151          * @deprecated see {@link android.provider.ContactsContract}
152          */
153         @Deprecated
154         public static final Uri CONTENT_URI =
155             Uri.parse("content://contacts/settings");
156 
157         /**
158          * The directory twig for this sub-table
159          * @deprecated see {@link android.provider.ContactsContract}
160          */
161         @Deprecated
162         public static final String CONTENT_DIRECTORY = "settings";
163 
164         /**
165          * The default sort order for this table
166          * @deprecated see {@link android.provider.ContactsContract}
167          */
168         @Deprecated
169         public static final String DEFAULT_SORT_ORDER = "key ASC";
170 
171         /**
172          * A setting that is used to indicate if we should sync down all groups for the
173          * specified account. For this setting the _SYNC_ACCOUNT column must be set.
174          * If this isn't set then we will only sync the groups whose SHOULD_SYNC column
175          * is set to true.
176          * <p>
177          * This is a boolean setting. It is true if it is set and it is anything other than the
178          * emptry string or "0".
179          * @deprecated see {@link android.provider.ContactsContract}
180          */
181         @Deprecated
182         public static final String SYNC_EVERYTHING = "syncEverything";
183 
184         /**
185          * @deprecated see {@link android.provider.ContactsContract}
186          */
187         @Deprecated
getSetting(ContentResolver cr, String account, String key)188         public static String getSetting(ContentResolver cr, String account, String key) {
189             // For now we only support a single account and the UI doesn't know what
190             // the account name is, so we're using a global setting for SYNC_EVERYTHING.
191             // Some day when we add multiple accounts to the UI this should honor the account
192             // that was asked for.
193             String selectString;
194             String[] selectArgs;
195             if (false) {
196                 selectString = (account == null)
197                         ? "_sync_account is null AND key=?"
198                         : "_sync_account=? AND key=?";
199 //                : "_sync_account=? AND _sync_account_type=? AND key=?";
200                 selectArgs = (account == null)
201                 ? new String[]{key}
202                 : new String[]{account, key};
203             } else {
204                 selectString = "key=?";
205                 selectArgs = new String[] {key};
206             }
207             Cursor cursor = cr.query(Settings.CONTENT_URI, new String[]{VALUE},
208                     selectString, selectArgs, null);
209             try {
210                 if (!cursor.moveToNext()) return null;
211                 return cursor.getString(0);
212             } finally {
213                 cursor.close();
214             }
215         }
216 
217         /**
218          * @deprecated see {@link android.provider.ContactsContract}
219          */
220         @Deprecated
setSetting(ContentResolver cr, String account, String key, String value)221         public static void setSetting(ContentResolver cr, String account, String key,
222                 String value) {
223             ContentValues values = new ContentValues();
224             // For now we only support a single account and the UI doesn't know what
225             // the account name is, so we're using a global setting for SYNC_EVERYTHING.
226             // Some day when we add multiple accounts to the UI this should honor the account
227             // that was asked for.
228             //values.put(_SYNC_ACCOUNT, account.mName);
229             //values.put(_SYNC_ACCOUNT_TYPE, account.mType);
230             values.put(KEY, key);
231             values.put(VALUE, value);
232             cr.update(Settings.CONTENT_URI, values, null, null);
233         }
234     }
235 
236     /**
237      * Columns from the People table that other tables join into themselves.
238      * @deprecated see {@link android.provider.ContactsContract}
239      */
240     @Deprecated
241     public interface PeopleColumns {
242         /**
243          * The person's name.
244          * <P>Type: TEXT</P>
245          * @deprecated see {@link android.provider.ContactsContract}
246          */
247         @Deprecated
248         public static final String NAME = "name";
249 
250         /**
251          * Phonetic equivalent of the person's name, in a locale-dependent
252          * character set (e.g. hiragana for Japanese).
253          * Used for pronunciation and/or collation in some languages.
254          * <p>Type: TEXT</P>
255          * @deprecated see {@link android.provider.ContactsContract}
256          */
257         @Deprecated
258         public static final String PHONETIC_NAME = "phonetic_name";
259 
260         /**
261          * The display name. If name is not null name, else if number is not null number,
262          * else if email is not null email.
263          * <P>Type: TEXT</P>
264          * @deprecated see {@link android.provider.ContactsContract}
265          */
266         @Deprecated
267         public static final String DISPLAY_NAME = "display_name";
268 
269         /**
270          * The field for sorting list phonetically. The content of this field
271          * may not be human readable but phonetically sortable.
272          * <P>Type: TEXT</p>
273          * @hide Used only in Contacts application for now.
274          * @deprecated see {@link android.provider.ContactsContract}
275          */
276         @Deprecated
277         public static final String SORT_STRING = "sort_string";
278 
279         /**
280          * Notes about the person.
281          * <P>Type: TEXT</P>
282          * @deprecated see {@link android.provider.ContactsContract}
283          */
284         @Deprecated
285         public static final String NOTES = "notes";
286 
287         /**
288          * The number of times a person has been contacted
289          * <P>Type: INTEGER</P>
290          * @deprecated see {@link android.provider.ContactsContract}
291          */
292         @Deprecated
293         public static final String TIMES_CONTACTED = "times_contacted";
294 
295         /**
296          * The last time a person was contacted.
297          * <P>Type: INTEGER</P>
298          * @deprecated see {@link android.provider.ContactsContract}
299          */
300         @Deprecated
301         public static final String LAST_TIME_CONTACTED = "last_time_contacted";
302 
303         /**
304          * A custom ringtone associated with a person. Not always present.
305          * <P>Type: TEXT (URI to the ringtone)</P>
306          * @deprecated see {@link android.provider.ContactsContract}
307          */
308         @Deprecated
309         public static final String CUSTOM_RINGTONE = "custom_ringtone";
310 
311         /**
312          * Whether the person should always be sent to voicemail. Not always
313          * present.
314          * <P>Type: INTEGER (0 for false, 1 for true)</P>
315          * @deprecated see {@link android.provider.ContactsContract}
316          */
317         @Deprecated
318         public static final String SEND_TO_VOICEMAIL = "send_to_voicemail";
319 
320         /**
321          * Is the contact starred?
322          * <P>Type: INTEGER (boolean)</P>
323          * @deprecated see {@link android.provider.ContactsContract}
324          */
325         @Deprecated
326         public static final String STARRED = "starred";
327 
328         /**
329          * The server version of the photo
330          * <P>Type: TEXT (the version number portion of the photo URI)</P>
331          * @deprecated see {@link android.provider.ContactsContract}
332          */
333         @Deprecated
334         public static final String PHOTO_VERSION = "photo_version";
335     }
336 
337     /**
338      * This table contains people.
339      * @deprecated see {@link android.provider.ContactsContract}
340      */
341     @Deprecated
342     public static final class People implements BaseColumns, PeopleColumns,
343             PhonesColumns, PresenceColumns {
344         /**
345          * no public constructor since this is a utility class
346          * @deprecated see {@link android.provider.ContactsContract}
347          */
348         @Deprecated
People()349         private People() {}
350 
351         /**
352          * The content:// style URL for this table
353          * @deprecated see {@link android.provider.ContactsContract}
354          */
355         @Deprecated
356         public static final Uri CONTENT_URI =
357             Uri.parse("content://contacts/people");
358 
359         /**
360          * The content:// style URL for filtering people by name. The filter
361          * argument should be passed as an additional path segment after this URI.
362          * @deprecated see {@link android.provider.ContactsContract}
363          */
364         @Deprecated
365         public static final Uri CONTENT_FILTER_URI =
366             Uri.parse("content://contacts/people/filter");
367 
368         /**
369          * The content:// style URL for the table that holds the deleted
370          * contacts.
371          * @deprecated see {@link android.provider.ContactsContract}
372          */
373         @Deprecated
374         public static final Uri DELETED_CONTENT_URI =
375             Uri.parse("content://contacts/deleted_people");
376 
377         /**
378          * The content:// style URL for filtering people that have a specific
379          * E-mail or IM address. The filter argument should be passed as an
380          * additional path segment after this URI. This matches any people with
381          * at least one E-mail or IM {@link ContactMethods} that match the
382          * filter.
383          *
384          * Not exposed because we expect significant changes in the contacts
385          * schema and do not want to have to support this.
386          * @hide
387          * @deprecated see {@link android.provider.ContactsContract}
388          */
389         @Deprecated
390         public static final Uri WITH_EMAIL_OR_IM_FILTER_URI =
391             Uri.parse("content://contacts/people/with_email_or_im_filter");
392 
393         /**
394          * The MIME type of {@link #CONTENT_URI} providing a directory of
395          * people.
396          * @deprecated see {@link android.provider.ContactsContract}
397          */
398         @Deprecated
399         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/person";
400 
401         /**
402          * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
403          * person.
404          * @deprecated see {@link android.provider.ContactsContract}
405          */
406         @Deprecated
407         public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/person";
408 
409         /**
410          * The default sort order for this table
411          * @deprecated see {@link android.provider.ContactsContract}
412          */
413         @Deprecated
414         public static final String DEFAULT_SORT_ORDER = People.NAME + " ASC";
415 
416         /**
417          * The ID of the persons preferred phone number.
418          * <P>Type: INTEGER (foreign key to phones table on the _ID field)</P>
419          * @deprecated see {@link android.provider.ContactsContract}
420          */
421         @Deprecated
422         public static final String PRIMARY_PHONE_ID = "primary_phone";
423 
424         /**
425          * The ID of the persons preferred email.
426          * <P>Type: INTEGER (foreign key to contact_methods table on the
427          * _ID field)</P>
428          * @deprecated see {@link android.provider.ContactsContract}
429          */
430         @Deprecated
431         public static final String PRIMARY_EMAIL_ID = "primary_email";
432 
433         /**
434          * The ID of the persons preferred organization.
435          * <P>Type: INTEGER (foreign key to organizations table on the
436          * _ID field)</P>
437          * @deprecated see {@link android.provider.ContactsContract}
438          */
439         @Deprecated
440         public static final String PRIMARY_ORGANIZATION_ID = "primary_organization";
441 
442         /**
443          * This API is no longer supported as of O.
444          */
445         @Deprecated
markAsContacted(ContentResolver resolver, long personId)446         public static void markAsContacted(ContentResolver resolver, long personId) {
447             // No longer supported.
448         }
449 
450         /**
451          * @hide Used in vCard parser code.
452          * @deprecated see {@link android.provider.ContactsContract}
453          */
454         @Deprecated
tryGetMyContactsGroupId(ContentResolver resolver)455         public static long tryGetMyContactsGroupId(ContentResolver resolver) {
456             Cursor groupsCursor = resolver.query(Groups.CONTENT_URI, GROUPS_PROJECTION,
457                     Groups.SYSTEM_ID + "='" + Groups.GROUP_MY_CONTACTS + "'", null, null);
458             if (groupsCursor != null) {
459                 try {
460                     if (groupsCursor.moveToFirst()) {
461                         return groupsCursor.getLong(0);
462                     }
463                 } finally {
464                     groupsCursor.close();
465                 }
466             }
467             return 0;
468         }
469 
470         /**
471          * Adds a person to the My Contacts group.
472          *
473          * @param resolver the resolver to use
474          * @param personId the person to add to the group
475          * @return the URI of the group membership row
476          * @throws IllegalStateException if the My Contacts group can't be found
477          * @deprecated see {@link android.provider.ContactsContract}
478          */
479         @Deprecated
addToMyContactsGroup(ContentResolver resolver, long personId)480         public static Uri addToMyContactsGroup(ContentResolver resolver, long personId) {
481             long groupId = tryGetMyContactsGroupId(resolver);
482             if (groupId == 0) {
483                 throw new IllegalStateException("Failed to find the My Contacts group");
484             }
485 
486             return addToGroup(resolver, personId, groupId);
487         }
488 
489         /**
490          * Adds a person to a group referred to by name.
491          *
492          * @param resolver the resolver to use
493          * @param personId the person to add to the group
494          * @param groupName the name of the group to add the contact to
495          * @return the URI of the group membership row
496          * @throws IllegalStateException if the group can't be found
497          * @deprecated see {@link android.provider.ContactsContract}
498          */
499         @Deprecated
addToGroup(ContentResolver resolver, long personId, String groupName)500         public static Uri addToGroup(ContentResolver resolver, long personId, String groupName) {
501             long groupId = 0;
502             Cursor groupsCursor = resolver.query(Groups.CONTENT_URI, GROUPS_PROJECTION,
503                     Groups.NAME + "=?", new String[] { groupName }, null);
504             if (groupsCursor != null) {
505                 try {
506                     if (groupsCursor.moveToFirst()) {
507                         groupId = groupsCursor.getLong(0);
508                     }
509                 } finally {
510                     groupsCursor.close();
511                 }
512             }
513 
514             if (groupId == 0) {
515                 throw new IllegalStateException("Failed to find the My Contacts group");
516             }
517 
518             return addToGroup(resolver, personId, groupId);
519         }
520 
521         /**
522          * Adds a person to a group.
523          *
524          * @param resolver the resolver to use
525          * @param personId the person to add to the group
526          * @param groupId the group to add the person to
527          * @return the URI of the group membership row
528          * @deprecated see {@link android.provider.ContactsContract}
529          */
530         @Deprecated
addToGroup(ContentResolver resolver, long personId, long groupId)531         public static Uri addToGroup(ContentResolver resolver, long personId, long groupId) {
532             ContentValues values = new ContentValues();
533             values.put(GroupMembership.PERSON_ID, personId);
534             values.put(GroupMembership.GROUP_ID, groupId);
535             return resolver.insert(GroupMembership.CONTENT_URI, values);
536         }
537 
538         private static final String[] GROUPS_PROJECTION = new String[] {
539             Groups._ID,
540         };
541 
542         /**
543          * Creates a new contacts and adds it to the "My Contacts" group.
544          *
545          * @param resolver the ContentResolver to use
546          * @param values the values to use when creating the contact
547          * @return the URI of the contact, or null if the operation fails
548          * @deprecated see {@link android.provider.ContactsContract}
549          */
550         @Deprecated
createPersonInMyContactsGroup(ContentResolver resolver, ContentValues values)551         public static Uri createPersonInMyContactsGroup(ContentResolver resolver,
552                 ContentValues values) {
553 
554             Uri contactUri = resolver.insert(People.CONTENT_URI, values);
555             if (contactUri == null) {
556                 Log.e(TAG, "Failed to create the contact");
557                 return null;
558             }
559 
560             if (addToMyContactsGroup(resolver, ContentUris.parseId(contactUri)) == null) {
561                 resolver.delete(contactUri, null, null);
562                 return null;
563             }
564             return contactUri;
565         }
566 
567         /**
568          * @deprecated see {@link android.provider.ContactsContract}
569          */
570         @Deprecated
queryGroups(ContentResolver resolver, long person)571         public static Cursor queryGroups(ContentResolver resolver, long person) {
572             return resolver.query(GroupMembership.CONTENT_URI, null, "person=?",
573                     new String[]{String.valueOf(person)}, Groups.DEFAULT_SORT_ORDER);
574         }
575 
576         /**
577          * Set the photo for this person. data may be null
578          * @param cr the ContentResolver to use
579          * @param person the Uri of the person whose photo is to be updated
580          * @param data the byte[] that represents the photo
581          * @deprecated see {@link android.provider.ContactsContract}
582          */
583         @Deprecated
setPhotoData(ContentResolver cr, Uri person, byte[] data)584         public static void setPhotoData(ContentResolver cr, Uri person, byte[] data) {
585             Uri photoUri = Uri.withAppendedPath(person, Contacts.Photos.CONTENT_DIRECTORY);
586             ContentValues values = new ContentValues();
587             values.put(Photos.DATA, data);
588             cr.update(photoUri, values, null, null);
589         }
590 
591         /**
592          * Opens an InputStream for the person's photo and returns the photo as a Bitmap.
593          * If the person's photo isn't present returns the placeholderImageResource instead.
594          * @param person the person whose photo should be used
595          * @deprecated see {@link android.provider.ContactsContract}
596          */
597         @Deprecated
openContactPhotoInputStream(ContentResolver cr, Uri person)598         public static InputStream openContactPhotoInputStream(ContentResolver cr, Uri person) {
599             Uri photoUri = Uri.withAppendedPath(person, Contacts.Photos.CONTENT_DIRECTORY);
600             Cursor cursor = cr.query(photoUri, new String[]{Photos.DATA}, null, null, null);
601             try {
602                 if (cursor == null || !cursor.moveToNext()) {
603                     return null;
604                 }
605                 byte[] data = cursor.getBlob(0);
606                 if (data == null) {
607                     return null;
608                 }
609                 return new ByteArrayInputStream(data);
610             } finally {
611                 if (cursor != null) cursor.close();
612             }
613         }
614 
615         /**
616          * Opens an InputStream for the person's photo and returns the photo as a Bitmap.
617          * If the person's photo isn't present returns the placeholderImageResource instead.
618          * @param context the Context
619          * @param person the person whose photo should be used
620          * @param placeholderImageResource the image resource to use if the person doesn't
621          *   have a photo
622          * @param options the decoding options, can be set to null
623          * @deprecated see {@link android.provider.ContactsContract}
624          */
625         @Deprecated
loadContactPhoto(Context context, Uri person, int placeholderImageResource, BitmapFactory.Options options)626         public static Bitmap loadContactPhoto(Context context, Uri person,
627                 int placeholderImageResource, BitmapFactory.Options options) {
628             if (person == null) {
629                 return loadPlaceholderPhoto(placeholderImageResource, context, options);
630             }
631 
632             InputStream stream = openContactPhotoInputStream(context.getContentResolver(), person);
633             Bitmap bm = stream != null ? BitmapFactory.decodeStream(stream, null, options) : null;
634             if (bm == null) {
635                 bm = loadPlaceholderPhoto(placeholderImageResource, context, options);
636             }
637             return bm;
638         }
639 
loadPlaceholderPhoto(int placeholderImageResource, Context context, BitmapFactory.Options options)640         private static Bitmap loadPlaceholderPhoto(int placeholderImageResource, Context context,
641                 BitmapFactory.Options options) {
642             if (placeholderImageResource == 0) {
643                 return null;
644             }
645             return BitmapFactory.decodeResource(context.getResources(),
646                     placeholderImageResource, options);
647         }
648 
649         /**
650          * A sub directory of a single person that contains all of their Phones.
651          * @deprecated see {@link android.provider.ContactsContract}
652          */
653         @Deprecated
654         public static final class Phones implements BaseColumns, PhonesColumns,
655                 PeopleColumns {
656             /**
657              * no public constructor since this is a utility class
658              */
Phones()659             private Phones() {}
660 
661             /**
662              * The directory twig for this sub-table
663              * @deprecated see {@link android.provider.ContactsContract}
664              */
665             @Deprecated
666             public static final String CONTENT_DIRECTORY = "phones";
667 
668             /**
669              * The default sort order for this table
670              * @deprecated see {@link android.provider.ContactsContract}
671              */
672             @Deprecated
673             public static final String DEFAULT_SORT_ORDER = "number ASC";
674         }
675 
676         /**
677          * A subdirectory of a single person that contains all of their
678          * ContactMethods.
679          * @deprecated see {@link android.provider.ContactsContract}
680          */
681         @Deprecated
682         public static final class ContactMethods
683                 implements BaseColumns, ContactMethodsColumns, PeopleColumns {
684             /**
685              * no public constructor since this is a utility class
686              */
ContactMethods()687             private ContactMethods() {}
688 
689             /**
690              * The directory twig for this sub-table
691              * @deprecated see {@link android.provider.ContactsContract}
692              */
693             @Deprecated
694             public static final String CONTENT_DIRECTORY = "contact_methods";
695 
696             /**
697              * The default sort order for this table
698              * @deprecated see {@link android.provider.ContactsContract}
699              */
700             @Deprecated
701             public static final String DEFAULT_SORT_ORDER = "data ASC";
702         }
703 
704         /**
705          * The extensions for a person
706          * @deprecated see {@link android.provider.ContactsContract}
707          */
708         @Deprecated
709         public static class Extensions implements BaseColumns, ExtensionsColumns {
710             /**
711              * no public constructor since this is a utility class
712              * @deprecated see {@link android.provider.ContactsContract}
713              */
714             @Deprecated
Extensions()715             private Extensions() {}
716 
717             /**
718              * The directory twig for this sub-table
719              * @deprecated see {@link android.provider.ContactsContract}
720              */
721             @Deprecated
722             public static final String CONTENT_DIRECTORY = "extensions";
723 
724             /**
725              * The default sort order for this table
726              * @deprecated see {@link android.provider.ContactsContract}
727              */
728             @Deprecated
729             public static final String DEFAULT_SORT_ORDER = "name ASC";
730 
731             /**
732              * The ID of the person this phone number is assigned to.
733              * <P>Type: INTEGER (long)</P>
734              * @deprecated see {@link android.provider.ContactsContract}
735              */
736             @Deprecated
737             public static final String PERSON_ID = "person";
738         }
739     }
740 
741     /**
742      * Columns from the groups table.
743      * @deprecated see {@link android.provider.ContactsContract}
744      */
745     @Deprecated
746     public interface GroupsColumns {
747         /**
748          * The group name.
749          * <P>Type: TEXT</P>
750          * @deprecated see {@link android.provider.ContactsContract}
751          */
752         @Deprecated
753         public static final String NAME = "name";
754 
755         /**
756          * Notes about the group.
757          * <P>Type: TEXT</P>
758          * @deprecated see {@link android.provider.ContactsContract}
759          */
760         @Deprecated
761         public static final String NOTES = "notes";
762 
763         /**
764          * Whether this group should be synced if the SYNC_EVERYTHING settings is false
765          * for this group's account.
766          * <P>Type: INTEGER (boolean)</P>
767          * @deprecated see {@link android.provider.ContactsContract}
768          */
769         @Deprecated
770         public static final String SHOULD_SYNC = "should_sync";
771 
772         /**
773          * The ID of this group if it is a System Group, null otherwise.
774          * <P>Type: TEXT</P>
775          * @deprecated see {@link android.provider.ContactsContract}
776          */
777         @Deprecated
778         public static final String SYSTEM_ID = "system_id";
779     }
780 
781     /**
782      * This table contains the groups for an account.
783      * @deprecated see {@link android.provider.ContactsContract}
784      */
785     @Deprecated
786     public static final class Groups
787             implements BaseColumns, GroupsColumns {
788         /**
789          * no public constructor since this is a utility class
790          */
Groups()791         private Groups() {}
792 
793         /**
794          * The content:// style URL for this table
795          * @deprecated see {@link android.provider.ContactsContract}
796          */
797         @Deprecated
798         public static final Uri CONTENT_URI =
799             Uri.parse("content://contacts/groups");
800 
801         /**
802          * The content:// style URL for the table that holds the deleted
803          * groups.
804          * @deprecated see {@link android.provider.ContactsContract}
805          */
806         @Deprecated
807         public static final Uri DELETED_CONTENT_URI =
808             Uri.parse("content://contacts/deleted_groups");
809 
810         /**
811          * The MIME type of {@link #CONTENT_URI} providing a directory of
812          * groups.
813          * @deprecated see {@link android.provider.ContactsContract}
814          */
815         @Deprecated
816         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroup";
817 
818         /**
819          * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
820          * group.
821          * @deprecated see {@link android.provider.ContactsContract}
822          */
823         @Deprecated
824         public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contactsgroup";
825 
826         /**
827          * The default sort order for this table
828          * @deprecated see {@link android.provider.ContactsContract}
829          */
830         @Deprecated
831         public static final String DEFAULT_SORT_ORDER = NAME + " ASC";
832 
833         /**
834          * @deprecated see {@link android.provider.ContactsContract}
835          */
836         @Deprecated
837         public static final String GROUP_ANDROID_STARRED = "Starred in Android";
838 
839         /**
840          * The "My Contacts" system group.
841          * @deprecated see {@link android.provider.ContactsContract}
842          */
843         @Deprecated
844         public static final String GROUP_MY_CONTACTS = "Contacts";
845     }
846 
847     /**
848      * Columns from the Phones table that other columns join into themselves.
849      * @deprecated see {@link android.provider.ContactsContract}
850      */
851     @Deprecated
852     public interface PhonesColumns {
853         /**
854          * The type of the the phone number.
855          * <P>Type: INTEGER (one of the constants below)</P>
856          * @deprecated see {@link android.provider.ContactsContract}
857          */
858         @Deprecated
859         public static final String TYPE = "type";
860 
861         /**
862          * @deprecated see {@link android.provider.ContactsContract}
863          */
864         @Deprecated
865         public static final int TYPE_CUSTOM = 0;
866         /**
867          * @deprecated see {@link android.provider.ContactsContract}
868          */
869         @Deprecated
870         public static final int TYPE_HOME = 1;
871         /**
872          * @deprecated see {@link android.provider.ContactsContract}
873          */
874         @Deprecated
875         public static final int TYPE_MOBILE = 2;
876         /**
877          * @deprecated see {@link android.provider.ContactsContract}
878          */
879         @Deprecated
880         public static final int TYPE_WORK = 3;
881         /**
882          * @deprecated see {@link android.provider.ContactsContract}
883          */
884         @Deprecated
885         public static final int TYPE_FAX_WORK = 4;
886         /**
887          * @deprecated see {@link android.provider.ContactsContract}
888          */
889         @Deprecated
890         public static final int TYPE_FAX_HOME = 5;
891         /**
892          * @deprecated see {@link android.provider.ContactsContract}
893          */
894         @Deprecated
895         public static final int TYPE_PAGER = 6;
896         /**
897          * @deprecated see {@link android.provider.ContactsContract}
898          */
899         @Deprecated
900         public static final int TYPE_OTHER = 7;
901 
902         /**
903          * The user provided label for the phone number, only used if TYPE is TYPE_CUSTOM.
904          * <P>Type: TEXT</P>
905          * @deprecated see {@link android.provider.ContactsContract}
906          */
907         @Deprecated
908         public static final String LABEL = "label";
909 
910         /**
911          * The phone number as the user entered it.
912          * <P>Type: TEXT</P>
913          * @deprecated see {@link android.provider.ContactsContract}
914          */
915         @Deprecated
916         public static final String NUMBER = "number";
917 
918         /**
919          * The normalized phone number
920          * <P>Type: TEXT</P>
921          * @deprecated see {@link android.provider.ContactsContract}
922          */
923         @Deprecated
924         public static final String NUMBER_KEY = "number_key";
925 
926         /**
927          * Whether this is the primary phone number
928          * <P>Type: INTEGER (if set, non-0 means true)</P>
929          * @deprecated see {@link android.provider.ContactsContract}
930          */
931         @Deprecated
932         public static final String ISPRIMARY = "isprimary";
933     }
934 
935     /**
936      * This table stores phone numbers and a reference to the person that the
937      * contact method belongs to. Phone numbers are stored separately from
938      * other contact methods to make caller ID lookup more efficient.
939      * @deprecated see {@link android.provider.ContactsContract}
940      */
941     @Deprecated
942     public static final class Phones
943             implements BaseColumns, PhonesColumns, PeopleColumns {
944         /**
945          * no public constructor since this is a utility class
946          */
Phones()947         private Phones() {}
948 
949         /**
950          * @deprecated see {@link android.provider.ContactsContract}
951          */
952         @Deprecated
getDisplayLabel(Context context, int type, CharSequence label, CharSequence[] labelArray)953         public static final CharSequence getDisplayLabel(Context context, int type,
954                 CharSequence label, CharSequence[] labelArray) {
955             CharSequence display = "";
956 
957             if (type != People.Phones.TYPE_CUSTOM) {
958                 CharSequence[] labels = labelArray != null? labelArray
959                         : context.getResources().getTextArray(
960                                 com.android.internal.R.array.phoneTypes);
961                 try {
962                     display = labels[type - 1];
963                 } catch (ArrayIndexOutOfBoundsException e) {
964                     display = labels[People.Phones.TYPE_HOME - 1];
965                 }
966             } else {
967                 if (!TextUtils.isEmpty(label)) {
968                     display = label;
969                 }
970             }
971             return display;
972         }
973 
974         /**
975          * @deprecated see {@link android.provider.ContactsContract}
976          */
977         @Deprecated
getDisplayLabel(Context context, int type, CharSequence label)978         public static final CharSequence getDisplayLabel(Context context, int type,
979                 CharSequence label) {
980             return getDisplayLabel(context, type, label, null);
981         }
982 
983         /**
984          * The content:// style URL for this table
985          * @deprecated see {@link android.provider.ContactsContract}
986          */
987         @Deprecated
988         public static final Uri CONTENT_URI =
989             Uri.parse("content://contacts/phones");
990 
991         /**
992          * The content:// style URL for filtering phone numbers
993          * @deprecated see {@link android.provider.ContactsContract}
994          */
995         @Deprecated
996         public static final Uri CONTENT_FILTER_URL =
997             Uri.parse("content://contacts/phones/filter");
998 
999         /**
1000          * The MIME type of {@link #CONTENT_URI} providing a directory of
1001          * phones.
1002          * @deprecated see {@link android.provider.ContactsContract}
1003          */
1004         @Deprecated
1005         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/phone";
1006 
1007         /**
1008          * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
1009          * phone.
1010          * @deprecated see {@link android.provider.ContactsContract}
1011          */
1012         @Deprecated
1013         public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone";
1014 
1015         /**
1016          * The default sort order for this table
1017          * @deprecated see {@link android.provider.ContactsContract}
1018          */
1019         @Deprecated
1020         public static final String DEFAULT_SORT_ORDER = "name ASC";
1021 
1022         /**
1023          * The ID of the person this phone number is assigned to.
1024          * <P>Type: INTEGER (long)</P>
1025          * @deprecated see {@link android.provider.ContactsContract}
1026          */
1027         @Deprecated
1028         public static final String PERSON_ID = "person";
1029     }
1030 
1031     /**
1032      * @deprecated see {@link android.provider.ContactsContract}
1033      */
1034     @Deprecated
1035     public static final class GroupMembership implements BaseColumns, GroupsColumns {
1036         /**
1037          * no public constructor since this is a utility class
1038          */
GroupMembership()1039         private GroupMembership() {}
1040 
1041         /**
1042          * The content:// style URL for this table
1043          * @deprecated see {@link android.provider.ContactsContract}
1044          */
1045         @Deprecated
1046         public static final Uri CONTENT_URI =
1047             Uri.parse("content://contacts/groupmembership");
1048 
1049         /**
1050          * The content:// style URL for this table
1051          * @deprecated see {@link android.provider.ContactsContract}
1052          */
1053         @Deprecated
1054         public static final Uri RAW_CONTENT_URI =
1055             Uri.parse("content://contacts/groupmembershipraw");
1056 
1057         /**
1058          * The directory twig for this sub-table
1059          * @deprecated see {@link android.provider.ContactsContract}
1060          */
1061         @Deprecated
1062         public static final String CONTENT_DIRECTORY = "groupmembership";
1063 
1064         /**
1065          * The MIME type of {@link #CONTENT_URI} providing a directory of all
1066          * person groups.
1067          * @deprecated see {@link android.provider.ContactsContract}
1068          */
1069         @Deprecated
1070         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroupmembership";
1071 
1072         /**
1073          * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
1074          * person group.
1075          * @deprecated see {@link android.provider.ContactsContract}
1076          */
1077         @Deprecated
1078         public static final String CONTENT_ITEM_TYPE =
1079                 "vnd.android.cursor.item/contactsgroupmembership";
1080 
1081         /**
1082          * The default sort order for this table
1083          * @deprecated see {@link android.provider.ContactsContract}
1084          */
1085         @Deprecated
1086         public static final String DEFAULT_SORT_ORDER = "group_id ASC";
1087 
1088         /**
1089          * The row id of the accounts group.
1090          * <P>Type: TEXT</P>
1091          * @deprecated see {@link android.provider.ContactsContract}
1092          */
1093         @Deprecated
1094         public static final String GROUP_ID = "group_id";
1095 
1096         /**
1097          * The sync id of the group.
1098          * <P>Type: TEXT</P>
1099          * @deprecated see {@link android.provider.ContactsContract}
1100          */
1101         @Deprecated
1102         public static final String GROUP_SYNC_ID = "group_sync_id";
1103 
1104         /**
1105          * The account of the group.
1106          * <P>Type: TEXT</P>
1107          * @deprecated see {@link android.provider.ContactsContract}
1108          */
1109         @Deprecated
1110         public static final String GROUP_SYNC_ACCOUNT = "group_sync_account";
1111 
1112         /**
1113          * The account type of the group.
1114          * <P>Type: TEXT</P>
1115          * @deprecated see {@link android.provider.ContactsContract}
1116          */
1117         @Deprecated
1118         public static final String GROUP_SYNC_ACCOUNT_TYPE = "group_sync_account_type";
1119 
1120         /**
1121          * The row id of the person.
1122          * <P>Type: TEXT</P>
1123          * @deprecated see {@link android.provider.ContactsContract}
1124          */
1125         @Deprecated
1126         public static final String PERSON_ID = "person";
1127     }
1128 
1129     /**
1130      * Columns from the ContactMethods table that other tables join into
1131      * themseleves.
1132      * @deprecated see {@link android.provider.ContactsContract}
1133      */
1134     @Deprecated
1135     public interface ContactMethodsColumns {
1136         /**
1137          * The kind of the the contact method. For example, email address,
1138          * postal address, etc.
1139          * <P>Type: INTEGER (one of the values below)</P>
1140          * @deprecated see {@link android.provider.ContactsContract}
1141          */
1142         @Deprecated
1143         public static final String KIND = "kind";
1144 
1145         /**
1146          * The type of the contact method, must be one of the types below.
1147          * <P>Type: INTEGER (one of the values below)</P>
1148          * @deprecated see {@link android.provider.ContactsContract}
1149          */
1150         @Deprecated
1151         public static final String TYPE = "type";
1152         /**
1153          * @deprecated see {@link android.provider.ContactsContract}
1154          */
1155         @Deprecated
1156         public static final int TYPE_CUSTOM = 0;
1157         /**
1158          * @deprecated see {@link android.provider.ContactsContract}
1159          */
1160         @Deprecated
1161         public static final int TYPE_HOME = 1;
1162         /**
1163          * @deprecated see {@link android.provider.ContactsContract}
1164          */
1165         @Deprecated
1166         public static final int TYPE_WORK = 2;
1167         /**
1168          * @deprecated see {@link android.provider.ContactsContract}
1169          */
1170         @Deprecated
1171         public static final int TYPE_OTHER = 3;
1172 
1173         /**
1174          * @hide This is temporal. TYPE_MOBILE should be added to TYPE in the future.
1175          * @deprecated see {@link android.provider.ContactsContract}
1176          */
1177         @Deprecated
1178         public static final int MOBILE_EMAIL_TYPE_INDEX = 2;
1179 
1180         /**
1181          * @hide This is temporal. TYPE_MOBILE should be added to TYPE in the future.
1182          * This is not "mobile" but "CELL" since vCard uses it for identifying mobile phone.
1183          * @deprecated see {@link android.provider.ContactsContract}
1184          */
1185         @Deprecated
1186         public static final String MOBILE_EMAIL_TYPE_NAME = "_AUTO_CELL";
1187 
1188         /**
1189          * The user defined label for the the contact method.
1190          * <P>Type: TEXT</P>
1191          * @deprecated see {@link android.provider.ContactsContract}
1192          */
1193         @Deprecated
1194         public static final String LABEL = "label";
1195 
1196         /**
1197          * The data for the contact method.
1198          * <P>Type: TEXT</P>
1199          * @deprecated see {@link android.provider.ContactsContract}
1200          */
1201         @Deprecated
1202         public static final String DATA = "data";
1203 
1204         /**
1205          * Auxiliary data for the contact method.
1206          * <P>Type: TEXT</P>
1207          * @deprecated see {@link android.provider.ContactsContract}
1208          */
1209         @Deprecated
1210         public static final String AUX_DATA = "aux_data";
1211 
1212         /**
1213          * Whether this is the primary organization
1214          * <P>Type: INTEGER (if set, non-0 means true)</P>
1215          * @deprecated see {@link android.provider.ContactsContract}
1216          */
1217         @Deprecated
1218         public static final String ISPRIMARY = "isprimary";
1219     }
1220 
1221     /**
1222      * This table stores all non-phone contact methods and a reference to the
1223      * person that the contact method belongs to.
1224      * @deprecated see {@link android.provider.ContactsContract}
1225      */
1226     @Deprecated
1227     public static final class ContactMethods
1228             implements BaseColumns, ContactMethodsColumns, PeopleColumns {
1229         /**
1230          * The column with latitude data for postal locations
1231          * <P>Type: REAL</P>
1232          * @deprecated see {@link android.provider.ContactsContract}
1233          */
1234         @Deprecated
1235         public static final String POSTAL_LOCATION_LATITUDE = DATA;
1236 
1237         /**
1238          * The column with longitude data for postal locations
1239          * <P>Type: REAL</P>
1240          * @deprecated see {@link android.provider.ContactsContract}
1241          */
1242         @Deprecated
1243         public static final String POSTAL_LOCATION_LONGITUDE = AUX_DATA;
1244 
1245         /**
1246          * The predefined IM protocol types. The protocol can either be non-present, one
1247          * of these types, or a free-form string. These cases are encoded in the AUX_DATA
1248          * column as:
1249          *  - null
1250          *  - pre:<an integer, one of the protocols below>
1251          *  - custom:<a string>
1252          *  @deprecated see {@link android.provider.ContactsContract}
1253          */
1254         @Deprecated
1255         public static final int PROTOCOL_AIM = 0;
1256         /**
1257          * @deprecated see {@link android.provider.ContactsContract}
1258          */
1259         @Deprecated
1260         public static final int PROTOCOL_MSN = 1;
1261         /**
1262          * @deprecated see {@link android.provider.ContactsContract}
1263          */
1264         @Deprecated
1265         public static final int PROTOCOL_YAHOO = 2;
1266         /**
1267          * @deprecated see {@link android.provider.ContactsContract}
1268          */
1269         @Deprecated
1270         public static final int PROTOCOL_SKYPE = 3;
1271         /**
1272          * @deprecated see {@link android.provider.ContactsContract}
1273          */
1274         @Deprecated
1275         public static final int PROTOCOL_QQ = 4;
1276         /**
1277          * @deprecated see {@link android.provider.ContactsContract}
1278          */
1279         @Deprecated
1280         public static final int PROTOCOL_GOOGLE_TALK = 5;
1281         /**
1282          * @deprecated see {@link android.provider.ContactsContract}
1283          */
1284         @Deprecated
1285         public static final int PROTOCOL_ICQ = 6;
1286         /**
1287          * @deprecated see {@link android.provider.ContactsContract}
1288          */
1289         @Deprecated
1290         public static final int PROTOCOL_JABBER = 7;
1291 
1292         /**
1293          * @deprecated see {@link android.provider.ContactsContract}
1294          */
1295         @Deprecated
encodePredefinedImProtocol(int protocol)1296         public static String encodePredefinedImProtocol(int protocol) {
1297             return "pre:" + protocol;
1298         }
1299 
1300         /**
1301          * @deprecated see {@link android.provider.ContactsContract}
1302          */
1303         @Deprecated
encodeCustomImProtocol(String protocolString)1304         public static String encodeCustomImProtocol(String protocolString) {
1305             return "custom:" + protocolString;
1306         }
1307 
1308         /**
1309          * @deprecated see {@link android.provider.ContactsContract}
1310          */
1311         @Deprecated
decodeImProtocol(String encodedString)1312         public static Object decodeImProtocol(String encodedString) {
1313             if (encodedString == null) {
1314                 return null;
1315             }
1316 
1317             if (encodedString.startsWith("pre:")) {
1318                 return Integer.parseInt(encodedString.substring(4));
1319             }
1320 
1321             if (encodedString.startsWith("custom:")) {
1322                 return encodedString.substring(7);
1323             }
1324 
1325             throw new IllegalArgumentException(
1326                     "the value is not a valid encoded protocol, " + encodedString);
1327         }
1328 
1329         /**
1330          * TODO find a place to put the canonical version of these.
1331          */
1332         interface ProviderNames {
1333             //
1334             //NOTE: update Contacts.java with new providers when they're added.
1335             //
1336             String YAHOO = "Yahoo";
1337             String GTALK = "GTalk";
1338             String MSN = "MSN";
1339             String ICQ = "ICQ";
1340             String AIM = "AIM";
1341             String XMPP = "XMPP";
1342             String JABBER = "JABBER";
1343             String SKYPE = "SKYPE";
1344             String QQ = "QQ";
1345         }
1346 
1347         /**
1348          * This looks up the provider name defined in
1349          * from the predefined IM protocol id.
1350          * This is used for interacting with the IM application.
1351          *
1352          * @param protocol the protocol ID
1353          * @return the provider name the IM app uses for the given protocol, or null if no
1354          * provider is defined for the given protocol
1355          * @deprecated see {@link android.provider.ContactsContract}
1356          * @hide
1357          */
1358         @Deprecated
lookupProviderNameFromId(int protocol)1359         public static String lookupProviderNameFromId(int protocol) {
1360             switch (protocol) {
1361                 case PROTOCOL_GOOGLE_TALK:
1362                     return ProviderNames.GTALK;
1363                 case PROTOCOL_AIM:
1364                     return ProviderNames.AIM;
1365                 case PROTOCOL_MSN:
1366                     return ProviderNames.MSN;
1367                 case PROTOCOL_YAHOO:
1368                     return ProviderNames.YAHOO;
1369                 case PROTOCOL_ICQ:
1370                     return ProviderNames.ICQ;
1371                 case PROTOCOL_JABBER:
1372                     return ProviderNames.JABBER;
1373                 case PROTOCOL_SKYPE:
1374                     return ProviderNames.SKYPE;
1375                 case PROTOCOL_QQ:
1376                     return ProviderNames.QQ;
1377             }
1378             return null;
1379         }
1380 
1381         /**
1382          * no public constructor since this is a utility class
1383          */
ContactMethods()1384         private ContactMethods() {}
1385 
1386         /**
1387          * @deprecated see {@link android.provider.ContactsContract}
1388          */
1389         @Deprecated
getDisplayLabel(Context context, int kind, int type, CharSequence label)1390         public static final CharSequence getDisplayLabel(Context context, int kind,
1391                 int type, CharSequence label) {
1392             CharSequence display = "";
1393             switch (kind) {
1394                 case KIND_EMAIL: {
1395                     if (type != People.ContactMethods.TYPE_CUSTOM) {
1396                         CharSequence[] labels = context.getResources().getTextArray(
1397                                 com.android.internal.R.array.emailAddressTypes);
1398                         try {
1399                             display = labels[type - 1];
1400                         } catch (ArrayIndexOutOfBoundsException e) {
1401                             display = labels[ContactMethods.TYPE_HOME - 1];
1402                         }
1403                     } else {
1404                         if (!TextUtils.isEmpty(label)) {
1405                             display = label;
1406                         }
1407                     }
1408                     break;
1409                 }
1410 
1411                 case KIND_POSTAL: {
1412                     if (type != People.ContactMethods.TYPE_CUSTOM) {
1413                         CharSequence[] labels = context.getResources().getTextArray(
1414                                 com.android.internal.R.array.postalAddressTypes);
1415                         try {
1416                             display = labels[type - 1];
1417                         } catch (ArrayIndexOutOfBoundsException e) {
1418                             display = labels[ContactMethods.TYPE_HOME - 1];
1419                         }
1420                     } else {
1421                         if (!TextUtils.isEmpty(label)) {
1422                             display = label;
1423                         }
1424                     }
1425                     break;
1426                 }
1427 
1428                 default:
1429                     display = context.getString(R.string.untitled);
1430             }
1431             return display;
1432         }
1433 
1434         /**
1435          * Add a longitude and latitude location to a postal address.
1436          *
1437          * @param context the context to use when updating the database
1438          * @param postalId the address to update
1439          * @param latitude the latitude for the address
1440          * @param longitude the longitude for the address
1441          * @deprecated see {@link android.provider.ContactsContract}
1442          */
1443         @Deprecated
addPostalLocation(Context context, long postalId, double latitude, double longitude)1444         public void addPostalLocation(Context context, long postalId,
1445                 double latitude, double longitude) {
1446             final ContentResolver resolver = context.getContentResolver();
1447             // Insert the location
1448             ContentValues values = new ContentValues(2);
1449             values.put(POSTAL_LOCATION_LATITUDE, latitude);
1450             values.put(POSTAL_LOCATION_LONGITUDE, longitude);
1451             Uri loc = resolver.insert(CONTENT_URI, values);
1452             long locId = ContentUris.parseId(loc);
1453 
1454             // Update the postal address
1455             values.clear();
1456             values.put(AUX_DATA, locId);
1457             resolver.update(ContentUris.withAppendedId(CONTENT_URI, postalId), values, null, null);
1458         }
1459 
1460         /**
1461          * The content:// style URL for this table
1462          * @deprecated see {@link android.provider.ContactsContract}
1463          */
1464         @Deprecated
1465         public static final Uri CONTENT_URI =
1466             Uri.parse("content://contacts/contact_methods");
1467 
1468         /**
1469          * The content:// style URL for sub-directory of e-mail addresses.
1470          * @deprecated see {@link android.provider.ContactsContract}
1471          */
1472         @Deprecated
1473         public static final Uri CONTENT_EMAIL_URI =
1474             Uri.parse("content://contacts/contact_methods/email");
1475 
1476         /**
1477          * The MIME type of {@link #CONTENT_URI} providing a directory of
1478          * @deprecated see {@link android.provider.ContactsContract}
1479          * phones.
1480          */
1481         @Deprecated
1482         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact-methods";
1483 
1484         /**
1485          * The MIME type of a {@link #CONTENT_EMAIL_URI} sub-directory of
1486          * multiple {@link Contacts#KIND_EMAIL} entries.
1487          * @deprecated see {@link android.provider.ContactsContract}
1488          */
1489         @Deprecated
1490         public static final String CONTENT_EMAIL_TYPE = "vnd.android.cursor.dir/email";
1491 
1492         /**
1493          * The MIME type of a {@link #CONTENT_EMAIL_URI} sub-directory of
1494          * multiple {@link Contacts#KIND_POSTAL} entries.
1495          * @deprecated see {@link android.provider.ContactsContract}
1496          */
1497         @Deprecated
1498         public static final String CONTENT_POSTAL_TYPE = "vnd.android.cursor.dir/postal-address";
1499 
1500         /**
1501          * The MIME type of a {@link #CONTENT_URI} sub-directory of a single
1502          * {@link Contacts#KIND_EMAIL} entry.
1503          * @deprecated see {@link android.provider.ContactsContract}
1504          */
1505         @Deprecated
1506         public static final String CONTENT_EMAIL_ITEM_TYPE = "vnd.android.cursor.item/email";
1507 
1508         /**
1509          * The MIME type of a {@link #CONTENT_URI} sub-directory of a single
1510          * {@link Contacts#KIND_POSTAL} entry.
1511          * @deprecated see {@link android.provider.ContactsContract}
1512          */
1513         @Deprecated
1514         public static final String CONTENT_POSTAL_ITEM_TYPE
1515                 = "vnd.android.cursor.item/postal-address";
1516 
1517         /**
1518          * The MIME type of a {@link #CONTENT_URI} sub-directory of a single
1519          * {@link Contacts#KIND_IM} entry.
1520          * @deprecated see {@link android.provider.ContactsContract}
1521          */
1522         @Deprecated
1523         public static final String CONTENT_IM_ITEM_TYPE = "vnd.android.cursor.item/jabber-im";
1524 
1525         /**
1526          * The default sort order for this table
1527          * @deprecated see {@link android.provider.ContactsContract}
1528          */
1529         @Deprecated
1530         public static final String DEFAULT_SORT_ORDER = "name ASC";
1531 
1532         /**
1533          * The ID of the person this contact method is assigned to.
1534          * <P>Type: INTEGER (long)</P>
1535          * @deprecated see {@link android.provider.ContactsContract}
1536          */
1537         @Deprecated
1538         public static final String PERSON_ID = "person";
1539     }
1540 
1541     /**
1542      * The IM presence columns with some contacts specific columns mixed in.
1543      * @deprecated see {@link android.provider.ContactsContract}
1544      */
1545     @Deprecated
1546     public interface PresenceColumns {
1547         /**
1548          * The priority, an integer, used by XMPP presence
1549          * <P>Type: INTEGER</P>
1550          */
1551         String PRIORITY = "priority";
1552 
1553         /**
1554          * The server defined status.
1555          * <P>Type: INTEGER (one of the values below)</P>
1556          */
1557         String PRESENCE_STATUS = ContactsContract.StatusUpdates.PRESENCE;
1558 
1559         /**
1560          * Presence Status definition
1561          */
1562         int OFFLINE = ContactsContract.StatusUpdates.OFFLINE;
1563         int INVISIBLE = ContactsContract.StatusUpdates.INVISIBLE;
1564         int AWAY = ContactsContract.StatusUpdates.AWAY;
1565         int IDLE = ContactsContract.StatusUpdates.IDLE;
1566         int DO_NOT_DISTURB = ContactsContract.StatusUpdates.DO_NOT_DISTURB;
1567         int AVAILABLE = ContactsContract.StatusUpdates.AVAILABLE;
1568 
1569         /**
1570          * The user defined status line.
1571          * <P>Type: TEXT</P>
1572          */
1573         String PRESENCE_CUSTOM_STATUS = ContactsContract.StatusUpdates.STATUS;
1574 
1575         /**
1576          * The IM service the presence is coming from. Formatted using either
1577          * {@link Contacts.ContactMethods#encodePredefinedImProtocol} or
1578          * {@link Contacts.ContactMethods#encodeCustomImProtocol}.
1579          * <P>Type: STRING</P>
1580          * @deprecated see {@link android.provider.ContactsContract}
1581          */
1582         @Deprecated
1583         public static final String IM_PROTOCOL = "im_protocol";
1584 
1585         /**
1586          * The IM handle the presence item is for. The handle is scoped to
1587          * the {@link #IM_PROTOCOL}.
1588          * <P>Type: STRING</P>
1589          * @deprecated see {@link android.provider.ContactsContract}
1590          */
1591         @Deprecated
1592         public static final String IM_HANDLE = "im_handle";
1593 
1594         /**
1595          * The IM account for the local user that the presence data came from.
1596          * <P>Type: STRING</P>
1597          * @deprecated see {@link android.provider.ContactsContract}
1598          */
1599         @Deprecated
1600         public static final String IM_ACCOUNT = "im_account";
1601     }
1602 
1603     /**
1604      * Contains presence information about contacts.
1605      * @hide
1606      * @deprecated see {@link android.provider.ContactsContract}
1607      */
1608     @Deprecated
1609     public static final class Presence
1610             implements BaseColumns, PresenceColumns, PeopleColumns {
1611         /**
1612          * The content:// style URL for this table
1613          * @deprecated see {@link android.provider.ContactsContract}
1614          */
1615         @Deprecated
1616         public static final Uri CONTENT_URI =
1617             Uri.parse("content://contacts/presence");
1618 
1619         /**
1620          * The ID of the person this presence item is assigned to.
1621          * <P>Type: INTEGER (long)</P>
1622          * @deprecated see {@link android.provider.ContactsContract}
1623          */
1624         @Deprecated
1625         public static final String PERSON_ID = "person";
1626 
1627         /**
1628          * Gets the resource ID for the proper presence icon.
1629          *
1630          * @param status the status to get the icon for
1631          * @return the resource ID for the proper presence icon
1632          * @deprecated see {@link android.provider.ContactsContract}
1633          */
1634         @Deprecated
getPresenceIconResourceId(int status)1635         public static final int getPresenceIconResourceId(int status) {
1636             switch (status) {
1637                 case Contacts.People.AVAILABLE:
1638                     return com.android.internal.R.drawable.presence_online;
1639 
1640                 case Contacts.People.IDLE:
1641                 case Contacts.People.AWAY:
1642                     return com.android.internal.R.drawable.presence_away;
1643 
1644                 case Contacts.People.DO_NOT_DISTURB:
1645                     return com.android.internal.R.drawable.presence_busy;
1646 
1647                 case Contacts.People.INVISIBLE:
1648                     return com.android.internal.R.drawable.presence_invisible;
1649 
1650                 case Contacts.People.OFFLINE:
1651                 default:
1652                     return com.android.internal.R.drawable.presence_offline;
1653             }
1654         }
1655 
1656         /**
1657          * Sets a presence icon to the proper graphic
1658          *
1659          * @param icon the icon to to set
1660          * @param serverStatus that status
1661          * @deprecated see {@link android.provider.ContactsContract}
1662          */
1663         @Deprecated
setPresenceIcon(ImageView icon, int serverStatus)1664         public static final void setPresenceIcon(ImageView icon, int serverStatus) {
1665             icon.setImageResource(getPresenceIconResourceId(serverStatus));
1666         }
1667     }
1668 
1669     /**
1670      * Columns from the Organizations table that other columns join into themselves.
1671      * @deprecated see {@link android.provider.ContactsContract}
1672      */
1673     @Deprecated
1674     public interface OrganizationColumns {
1675         /**
1676          * The type of the organizations.
1677          * <P>Type: INTEGER (one of the constants below)</P>
1678          * @deprecated see {@link android.provider.ContactsContract}
1679          */
1680         @Deprecated
1681         public static final String TYPE = "type";
1682 
1683         /**
1684          * @deprecated see {@link android.provider.ContactsContract}
1685          */
1686         @Deprecated
1687         public static final int TYPE_CUSTOM = 0;
1688         /**
1689          * @deprecated see {@link android.provider.ContactsContract}
1690          */
1691         @Deprecated
1692         public static final int TYPE_WORK = 1;
1693         /**
1694          * @deprecated see {@link android.provider.ContactsContract}
1695          */
1696         @Deprecated
1697         public static final int TYPE_OTHER = 2;
1698 
1699         /**
1700          * The user provided label, only used if TYPE is TYPE_CUSTOM.
1701          * <P>Type: TEXT</P>
1702          * @deprecated see {@link android.provider.ContactsContract}
1703          */
1704         @Deprecated
1705         public static final String LABEL = "label";
1706 
1707         /**
1708          * The name of the company for this organization.
1709          * <P>Type: TEXT</P>
1710          * @deprecated see {@link android.provider.ContactsContract}
1711          */
1712         @Deprecated
1713         public static final String COMPANY = "company";
1714 
1715         /**
1716          * The title within this organization.
1717          * <P>Type: TEXT</P>
1718          * @deprecated see {@link android.provider.ContactsContract}
1719          */
1720         @Deprecated
1721         public static final String TITLE = "title";
1722 
1723         /**
1724          * The person this organization is tied to.
1725          * <P>Type: TEXT</P>
1726          * @deprecated see {@link android.provider.ContactsContract}
1727          */
1728         @Deprecated
1729         public static final String PERSON_ID = "person";
1730 
1731         /**
1732          * Whether this is the primary organization
1733          * <P>Type: INTEGER (if set, non-0 means true)</P>
1734          * @deprecated see {@link android.provider.ContactsContract}
1735          */
1736         @Deprecated
1737         public static final String ISPRIMARY = "isprimary";
1738     }
1739 
1740     /**
1741      * A sub directory of a single person that contains all of their Phones.
1742      * @deprecated see {@link android.provider.ContactsContract}
1743      */
1744     @Deprecated
1745     public static final class Organizations implements BaseColumns, OrganizationColumns {
1746         /**
1747          * no public constructor since this is a utility class
1748          */
Organizations()1749         private Organizations() {}
1750 
1751         /**
1752          * @deprecated see {@link android.provider.ContactsContract}
1753          */
1754         @Deprecated
getDisplayLabel(Context context, int type, CharSequence label)1755         public static final CharSequence getDisplayLabel(Context context, int type,
1756                 CharSequence label) {
1757             CharSequence display = "";
1758 
1759             if (type != TYPE_CUSTOM) {
1760                 CharSequence[] labels = context.getResources().getTextArray(
1761                         com.android.internal.R.array.organizationTypes);
1762                 try {
1763                     display = labels[type - 1];
1764                 } catch (ArrayIndexOutOfBoundsException e) {
1765                     display = labels[Organizations.TYPE_WORK - 1];
1766                 }
1767             } else {
1768                 if (!TextUtils.isEmpty(label)) {
1769                     display = label;
1770                 }
1771             }
1772             return display;
1773         }
1774 
1775         /**
1776          * The content:// style URL for this table
1777          * @deprecated see {@link android.provider.ContactsContract}
1778          */
1779         @Deprecated
1780         public static final Uri CONTENT_URI =
1781             Uri.parse("content://contacts/organizations");
1782 
1783         /**
1784          * The directory twig for this sub-table
1785          * @deprecated see {@link android.provider.ContactsContract}
1786          */
1787         @Deprecated
1788         public static final String CONTENT_DIRECTORY = "organizations";
1789 
1790         /**
1791          * The default sort order for this table
1792          * @deprecated see {@link android.provider.ContactsContract}
1793          */
1794         @Deprecated
1795         public static final String DEFAULT_SORT_ORDER = "company, title, isprimary ASC";
1796     }
1797 
1798     /**
1799      * Columns from the Photos table that other columns join into themselves.
1800      * @deprecated see {@link android.provider.ContactsContract}
1801      */
1802     @Deprecated
1803     public interface PhotosColumns {
1804         /**
1805          * The _SYNC_VERSION of the photo that was last downloaded
1806          * <P>Type: TEXT</P>
1807          * @deprecated see {@link android.provider.ContactsContract}
1808          */
1809         @Deprecated
1810         public static final String LOCAL_VERSION = "local_version";
1811 
1812         /**
1813          * The person this photo is associated with.
1814          * <P>Type: TEXT</P>
1815          * @deprecated see {@link android.provider.ContactsContract}
1816          */
1817         @Deprecated
1818         public static final String PERSON_ID = "person";
1819 
1820         /**
1821          * non-zero if a download is required and the photo isn't marked as a bad resource.
1822          * You must specify this in the columns in order to use it in the where clause.
1823          * <P>Type: INTEGER(boolean)</P>
1824          * @deprecated see {@link android.provider.ContactsContract}
1825          */
1826         @Deprecated
1827         public static final String DOWNLOAD_REQUIRED = "download_required";
1828 
1829         /**
1830          * non-zero if this photo is known to exist on the server
1831          * <P>Type: INTEGER(boolean)</P>
1832          * @deprecated see {@link android.provider.ContactsContract}
1833          */
1834         @Deprecated
1835         public static final String EXISTS_ON_SERVER = "exists_on_server";
1836 
1837         /**
1838          * Contains the description of the upload or download error from
1839          * the previous attempt. If null then the previous attempt succeeded.
1840          * <P>Type: TEXT</P>
1841          * @deprecated see {@link android.provider.ContactsContract}
1842          */
1843         @Deprecated
1844         public static final String SYNC_ERROR = "sync_error";
1845 
1846         /**
1847          * The image data, or null if there is no image.
1848          * <P>Type: BLOB</P>
1849          * @deprecated see {@link android.provider.ContactsContract}
1850          */
1851         @Deprecated
1852         public static final String DATA = "data";
1853 
1854     }
1855 
1856     /**
1857      * The photos over all of the people
1858      * @deprecated see {@link android.provider.ContactsContract}
1859      */
1860     @Deprecated
1861     public static final class Photos implements BaseColumns, PhotosColumns {
1862         /**
1863          * no public constructor since this is a utility class
1864          */
Photos()1865         private Photos() {}
1866 
1867         /**
1868          * The content:// style URL for this table
1869          * @deprecated see {@link android.provider.ContactsContract}
1870          */
1871         @Deprecated
1872         public static final Uri CONTENT_URI = Uri.parse("content://contacts/photos");
1873 
1874         /**
1875          * The directory twig for this sub-table
1876          * @deprecated see {@link android.provider.ContactsContract}
1877          */
1878         @Deprecated
1879         public static final String CONTENT_DIRECTORY = "photo";
1880 
1881         /**
1882          * The default sort order for this table
1883          * @deprecated see {@link android.provider.ContactsContract}
1884          */
1885         @Deprecated
1886         public static final String DEFAULT_SORT_ORDER = "person ASC";
1887     }
1888 
1889     /**
1890      * @deprecated see {@link android.provider.ContactsContract}
1891      */
1892     @Deprecated
1893     public interface ExtensionsColumns {
1894         /**
1895          * The name of this extension. May not be null. There may be at most one row for each name.
1896          * <P>Type: TEXT</P>
1897          * @deprecated see {@link android.provider.ContactsContract}
1898          */
1899         @Deprecated
1900         public static final String NAME = "name";
1901 
1902         /**
1903          * The value of this extension. May not be null.
1904          * <P>Type: TEXT</P>
1905          * @deprecated see {@link android.provider.ContactsContract}
1906          */
1907         @Deprecated
1908         public static final String VALUE = "value";
1909     }
1910 
1911     /**
1912      * The extensions for a person
1913      * @deprecated see {@link android.provider.ContactsContract}
1914      */
1915     @Deprecated
1916     public static final class Extensions implements BaseColumns, ExtensionsColumns {
1917         /**
1918          * no public constructor since this is a utility class
1919          */
Extensions()1920         private Extensions() {}
1921 
1922         /**
1923          * The content:// style URL for this table
1924          * @deprecated see {@link android.provider.ContactsContract}
1925          */
1926         @Deprecated
1927         public static final Uri CONTENT_URI =
1928             Uri.parse("content://contacts/extensions");
1929 
1930         /**
1931          * The MIME type of {@link #CONTENT_URI} providing a directory of
1932          * phones.
1933          * @deprecated see {@link android.provider.ContactsContract}
1934          */
1935         @Deprecated
1936         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_extensions";
1937 
1938         /**
1939          * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
1940          * phone.
1941          * @deprecated see {@link android.provider.ContactsContract}
1942          */
1943         @Deprecated
1944         public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_extensions";
1945 
1946         /**
1947          * The default sort order for this table
1948          * @deprecated see {@link android.provider.ContactsContract}
1949          */
1950         @Deprecated
1951         public static final String DEFAULT_SORT_ORDER = "person, name ASC";
1952 
1953         /**
1954          * The ID of the person this phone number is assigned to.
1955          * <P>Type: INTEGER (long)</P>
1956          * @deprecated see {@link android.provider.ContactsContract}
1957          */
1958         @Deprecated
1959         public static final String PERSON_ID = "person";
1960     }
1961 
1962     /**
1963      * Contains helper classes used to create or manage {@link android.content.Intent Intents}
1964      * that involve contacts.
1965      * @deprecated see {@link android.provider.ContactsContract}
1966      */
1967     @Deprecated
1968     public static final class Intents {
1969         /**
1970          * @deprecated see {@link android.provider.ContactsContract}
1971          */
1972         @Deprecated
Intents()1973         public Intents() {
1974         }
1975 
1976         /**
1977          * This is the intent that is fired when a search suggestion is clicked on.
1978          * @deprecated see {@link android.provider.ContactsContract}
1979          */
1980         @Deprecated
1981         public static final String SEARCH_SUGGESTION_CLICKED =
1982                 ContactsContract.Intents.SEARCH_SUGGESTION_CLICKED;
1983 
1984         /**
1985          * This is the intent that is fired when a search suggestion for dialing a number
1986          * is clicked on.
1987          * @deprecated see {@link android.provider.ContactsContract}
1988          */
1989         @Deprecated
1990         public static final String SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED =
1991                 ContactsContract.Intents.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED;
1992 
1993         /**
1994          * This is the intent that is fired when a search suggestion for creating a contact
1995          * is clicked on.
1996          * @deprecated see {@link android.provider.ContactsContract}
1997          */
1998         @Deprecated
1999         public static final String SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED =
2000                 ContactsContract.Intents.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED;
2001 
2002         /**
2003          * Starts an Activity that lets the user pick a contact to attach an image to.
2004          * After picking the contact it launches the image cropper in face detection mode.
2005          * @deprecated see {@link android.provider.ContactsContract}
2006          */
2007         @Deprecated
2008         public static final String ATTACH_IMAGE = ContactsContract.Intents.ATTACH_IMAGE;
2009 
2010         /**
2011          * Takes as input a data URI with a mailto: or tel: scheme. If a single
2012          * contact exists with the given data it will be shown. If no contact
2013          * exists, a dialog will ask the user if they want to create a new
2014          * contact with the provided details filled in. If multiple contacts
2015          * share the data the user will be prompted to pick which contact they
2016          * want to view.
2017          * <p>
2018          * For <code>mailto:</code> URIs, the scheme specific portion must be a
2019          * raw email address, such as one built using
2020          * {@link Uri#fromParts(String, String, String)}.
2021          * <p>
2022          * For <code>tel:</code> URIs, the scheme specific portion is compared
2023          * to existing numbers using the standard caller ID lookup algorithm.
2024          * The number must be properly encoded, for example using
2025          * {@link Uri#fromParts(String, String, String)}.
2026          * <p>
2027          * Any extras from the {@link Insert} class will be passed along to the
2028          * create activity if there are no contacts to show.
2029          * <p>
2030          * Passing true for the {@link #EXTRA_FORCE_CREATE} extra will skip
2031          * prompting the user when the contact doesn't exist.
2032          * @deprecated see {@link android.provider.ContactsContract}
2033          */
2034         @Deprecated
2035         public static final String SHOW_OR_CREATE_CONTACT =
2036                 ContactsContract.Intents.SHOW_OR_CREATE_CONTACT;
2037 
2038         /**
2039          * Used with {@link #SHOW_OR_CREATE_CONTACT} to force creating a new
2040          * contact if no matching contact found. Otherwise, default behavior is
2041          * to prompt user with dialog before creating.
2042          * <p>
2043          * Type: BOOLEAN
2044          * @deprecated see {@link android.provider.ContactsContract}
2045          */
2046         @Deprecated
2047         public static final String EXTRA_FORCE_CREATE = ContactsContract.Intents.EXTRA_FORCE_CREATE;
2048 
2049         /**
2050          * Used with {@link #SHOW_OR_CREATE_CONTACT} to specify an exact
2051          * description to be shown when prompting user about creating a new
2052          * contact.
2053          * <p>
2054          * Type: STRING
2055          * @deprecated see {@link android.provider.ContactsContract}
2056          */
2057         @Deprecated
2058         public static final String EXTRA_CREATE_DESCRIPTION =
2059                 ContactsContract.Intents.EXTRA_CREATE_DESCRIPTION;
2060 
2061         /**
2062          * Optional extra used with {@link #SHOW_OR_CREATE_CONTACT} to specify a
2063          * dialog location using screen coordinates. When not specified, the
2064          * dialog will be centered.
2065          *
2066          * @hide pending API council review
2067          * @deprecated see {@link android.provider.ContactsContract}
2068          */
2069         @Deprecated
2070         public static final String EXTRA_TARGET_RECT = ContactsContract.Intents.EXTRA_TARGET_RECT;
2071 
2072         /**
2073          * Intents related to the Contacts app UI.
2074          * @deprecated Do not use. This is not supported.
2075          */
2076         @Deprecated
2077         public static final class UI {
2078             /**
2079              * @deprecated Do not use. This is not supported.
2080              */
2081             @Deprecated
UI()2082             public UI() {
2083             }
2084 
2085             /**
2086              * The action for the default contacts list tab.
2087              * @deprecated Do not use. This is not supported.
2088              */
2089             @Deprecated
2090             public static final String LIST_DEFAULT
2091                     = "com.android.contacts.action.LIST_DEFAULT";
2092 
2093             /**
2094              * The action for the contacts list tab.
2095              * @deprecated Do not use. This is not supported.
2096              */
2097             @Deprecated
2098             public static final String LIST_GROUP_ACTION =
2099                     "com.android.contacts.action.LIST_GROUP";
2100 
2101             /**
2102              * When in LIST_GROUP_ACTION mode, this is the group to display.
2103              * @deprecated Do not use. This is not supported.
2104              */
2105             @Deprecated
2106             public static final String GROUP_NAME_EXTRA_KEY =
2107                     "com.android.contacts.extra.GROUP";
2108             /**
2109              * The action for the all contacts list tab.
2110              * @deprecated Do not use. This is not supported.
2111              */
2112             @Deprecated
2113             public static final String LIST_ALL_CONTACTS_ACTION =
2114                     "com.android.contacts.action.LIST_ALL_CONTACTS";
2115 
2116             /**
2117              * The action for the contacts with phone numbers list tab.
2118              * @deprecated Do not use. This is not supported.
2119              */
2120             @Deprecated
2121             public static final String LIST_CONTACTS_WITH_PHONES_ACTION =
2122                     "com.android.contacts.action.LIST_CONTACTS_WITH_PHONES";
2123 
2124             /**
2125              * The action for the starred contacts list tab.
2126              * @deprecated Do not use. This is not supported.
2127              */
2128             @Deprecated
2129             public static final String LIST_STARRED_ACTION =
2130                     "com.android.contacts.action.LIST_STARRED";
2131 
2132             /**
2133              * The action for the frequent contacts list tab.
2134              * @deprecated Do not use. This is not supported.
2135              */
2136             @Deprecated
2137             public static final String LIST_FREQUENT_ACTION =
2138                     "com.android.contacts.action.LIST_FREQUENT";
2139 
2140             /**
2141              * The action for the "strequent" contacts list tab. It first lists the starred
2142              * contacts in alphabetical order and then the frequent contacts in descending
2143              * order of the number of times they have been contacted.
2144              * @deprecated Do not use. This is not supported.
2145              */
2146             @Deprecated
2147             public static final String LIST_STREQUENT_ACTION =
2148                     "com.android.contacts.action.LIST_STREQUENT";
2149 
2150             /**
2151              * A key for to be used as an intent extra to set the activity
2152              * title to a custom String value.
2153              * @deprecated Do not use. This is not supported.
2154              */
2155             @Deprecated
2156             public static final String TITLE_EXTRA_KEY =
2157                     "com.android.contacts.extra.TITLE_EXTRA";
2158 
2159             /**
2160              * Activity Action: Display a filtered list of contacts
2161              * <p>
2162              * Input: Extra field {@link #FILTER_TEXT_EXTRA_KEY} is the text to use for
2163              * filtering
2164              * <p>
2165              * Output: Nothing.
2166              * @deprecated Do not use. This is not supported.
2167              */
2168             @Deprecated
2169             @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
2170             public static final String FILTER_CONTACTS_ACTION =
2171                     "com.android.contacts.action.FILTER_CONTACTS";
2172 
2173             /**
2174              * Used as an int extra field in {@link #FILTER_CONTACTS_ACTION}
2175              * intents to supply the text on which to filter.
2176              * @deprecated Do not use. This is not supported.
2177              */
2178             @Deprecated
2179             public static final String FILTER_TEXT_EXTRA_KEY =
2180                     "com.android.contacts.extra.FILTER_TEXT";
2181         }
2182 
2183         /**
2184          * Convenience class that contains string constants used
2185          * to create contact {@link android.content.Intent Intents}.
2186          * @deprecated see {@link android.provider.ContactsContract}
2187          */
2188         @Deprecated
2189         public static final class Insert {
2190             /**
2191              * @deprecated see {@link android.provider.ContactsContract}
2192              */
2193             @Deprecated
Insert()2194             public Insert() {
2195             }
2196 
2197             /** The action code to use when adding a contact
2198              * @deprecated see {@link android.provider.ContactsContract}
2199              */
2200             @Deprecated
2201             public static final String ACTION = ContactsContract.Intents.Insert.ACTION;
2202 
2203             /**
2204              * If present, forces a bypass of quick insert mode.
2205              * @deprecated see {@link android.provider.ContactsContract}
2206              */
2207             @Deprecated
2208             public static final String FULL_MODE = ContactsContract.Intents.Insert.FULL_MODE;
2209 
2210             /**
2211              * The extra field for the contact name.
2212              * <P>Type: String</P>
2213              * @deprecated see {@link android.provider.ContactsContract}
2214              */
2215             @Deprecated
2216             public static final String NAME = ContactsContract.Intents.Insert.NAME;
2217 
2218             /**
2219              * The extra field for the contact phonetic name.
2220              * <P>Type: String</P>
2221              * @deprecated see {@link android.provider.ContactsContract}
2222              */
2223             @Deprecated
2224             public static final String PHONETIC_NAME =
2225                     ContactsContract.Intents.Insert.PHONETIC_NAME;
2226 
2227             /**
2228              * The extra field for the contact company.
2229              * <P>Type: String</P>
2230              * @deprecated see {@link android.provider.ContactsContract}
2231              */
2232             @Deprecated
2233             public static final String COMPANY = ContactsContract.Intents.Insert.COMPANY;
2234 
2235             /**
2236              * The extra field for the contact job title.
2237              * <P>Type: String</P>
2238              * @deprecated see {@link android.provider.ContactsContract}
2239              */
2240             @Deprecated
2241             public static final String JOB_TITLE = ContactsContract.Intents.Insert.JOB_TITLE;
2242 
2243             /**
2244              * The extra field for the contact notes.
2245              * <P>Type: String</P>
2246              * @deprecated see {@link android.provider.ContactsContract}
2247              */
2248             @Deprecated
2249             public static final String NOTES = ContactsContract.Intents.Insert.NOTES;
2250 
2251             /**
2252              * The extra field for the contact phone number.
2253              * <P>Type: String</P>
2254              * @deprecated see {@link android.provider.ContactsContract}
2255              */
2256             @Deprecated
2257             public static final String PHONE = ContactsContract.Intents.Insert.PHONE;
2258 
2259             /**
2260              * The extra field for the contact phone number type.
2261              * <P>Type: Either an integer value from {@link android.provider.Contacts.PhonesColumns PhonesColumns},
2262              *  or a string specifying a custom label.</P>
2263              *  @deprecated see {@link android.provider.ContactsContract}
2264              */
2265             @Deprecated
2266             public static final String PHONE_TYPE = ContactsContract.Intents.Insert.PHONE_TYPE;
2267 
2268             /**
2269              * The extra field for the phone isprimary flag.
2270              * <P>Type: boolean</P>
2271              * @deprecated see {@link android.provider.ContactsContract}
2272              */
2273             @Deprecated
2274             public static final String PHONE_ISPRIMARY =
2275                     ContactsContract.Intents.Insert.PHONE_ISPRIMARY;
2276 
2277             /**
2278              * The extra field for an optional second contact phone number.
2279              * <P>Type: String</P>
2280              * @deprecated see {@link android.provider.ContactsContract}
2281              */
2282             @Deprecated
2283             public static final String SECONDARY_PHONE =
2284                     ContactsContract.Intents.Insert.SECONDARY_PHONE;
2285 
2286             /**
2287              * The extra field for an optional second contact phone number type.
2288              * <P>Type: Either an integer value from {@link android.provider.Contacts.PhonesColumns PhonesColumns},
2289              *  or a string specifying a custom label.</P>
2290              * @deprecated see {@link android.provider.ContactsContract}
2291              */
2292             @Deprecated
2293             public static final String SECONDARY_PHONE_TYPE =
2294                     ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE;
2295 
2296             /**
2297              * The extra field for an optional third contact phone number.
2298              * <P>Type: String</P>
2299              * @deprecated see {@link android.provider.ContactsContract}
2300              */
2301             @Deprecated
2302             public static final String TERTIARY_PHONE =
2303                     ContactsContract.Intents.Insert.TERTIARY_PHONE;
2304 
2305             /**
2306              * The extra field for an optional third contact phone number type.
2307              * <P>Type: Either an integer value from {@link android.provider.Contacts.PhonesColumns PhonesColumns},
2308              *  or a string specifying a custom label.</P>
2309              * @deprecated see {@link android.provider.ContactsContract}
2310              */
2311             @Deprecated
2312             public static final String TERTIARY_PHONE_TYPE =
2313                     ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE;
2314 
2315             /**
2316              * The extra field for the contact email address.
2317              * <P>Type: String</P>
2318              * @deprecated see {@link android.provider.ContactsContract}
2319              */
2320             @Deprecated
2321             public static final String EMAIL = ContactsContract.Intents.Insert.EMAIL;
2322 
2323             /**
2324              * The extra field for the contact email type.
2325              * <P>Type: Either an integer value from {@link android.provider.Contacts.ContactMethodsColumns ContactMethodsColumns}
2326              *  or a string specifying a custom label.</P>
2327              * @deprecated see {@link android.provider.ContactsContract}
2328              */
2329             @Deprecated
2330             public static final String EMAIL_TYPE = ContactsContract.Intents.Insert.EMAIL_TYPE;
2331 
2332             /**
2333              * The extra field for the email isprimary flag.
2334              * <P>Type: boolean</P>
2335              * @deprecated see {@link android.provider.ContactsContract}
2336              */
2337             @Deprecated
2338             public static final String EMAIL_ISPRIMARY =
2339                     ContactsContract.Intents.Insert.EMAIL_ISPRIMARY;
2340 
2341             /**
2342              * The extra field for an optional second contact email address.
2343              * <P>Type: String</P>
2344              * @deprecated see {@link android.provider.ContactsContract}
2345              */
2346             @Deprecated
2347             public static final String SECONDARY_EMAIL =
2348                     ContactsContract.Intents.Insert.SECONDARY_EMAIL;
2349 
2350             /**
2351              * The extra field for an optional second contact email type.
2352              * <P>Type: Either an integer value from {@link android.provider.Contacts.ContactMethodsColumns ContactMethodsColumns}
2353              *  or a string specifying a custom label.</P>
2354              * @deprecated see {@link android.provider.ContactsContract}
2355              */
2356             @Deprecated
2357             public static final String SECONDARY_EMAIL_TYPE =
2358                     ContactsContract.Intents.Insert.SECONDARY_EMAIL_TYPE;
2359 
2360             /**
2361              * The extra field for an optional third contact email address.
2362              * <P>Type: String</P>
2363              * @deprecated see {@link android.provider.ContactsContract}
2364              */
2365             @Deprecated
2366             public static final String TERTIARY_EMAIL =
2367                     ContactsContract.Intents.Insert.TERTIARY_EMAIL;
2368 
2369             /**
2370              * The extra field for an optional third contact email type.
2371              * <P>Type: Either an integer value from {@link android.provider.Contacts.ContactMethodsColumns ContactMethodsColumns}
2372              *  or a string specifying a custom label.</P>
2373              * @deprecated see {@link android.provider.ContactsContract}
2374              */
2375             @Deprecated
2376             public static final String TERTIARY_EMAIL_TYPE =
2377                     ContactsContract.Intents.Insert.TERTIARY_EMAIL_TYPE;
2378 
2379             /**
2380              * The extra field for the contact postal address.
2381              * <P>Type: String</P>
2382              * @deprecated see {@link android.provider.ContactsContract}
2383              */
2384             @Deprecated
2385             public static final String POSTAL = ContactsContract.Intents.Insert.POSTAL;
2386 
2387             /**
2388              * The extra field for the contact postal address type.
2389              * <P>Type: Either an integer value from {@link android.provider.Contacts.ContactMethodsColumns ContactMethodsColumns}
2390              *  or a string specifying a custom label.</P>
2391              * @deprecated see {@link android.provider.ContactsContract}
2392              */
2393             @Deprecated
2394             public static final String POSTAL_TYPE = ContactsContract.Intents.Insert.POSTAL_TYPE;
2395 
2396             /**
2397              * The extra field for the postal isprimary flag.
2398              * <P>Type: boolean</P>
2399              * @deprecated see {@link android.provider.ContactsContract}
2400              */
2401             @Deprecated
2402             public static final String POSTAL_ISPRIMARY = ContactsContract.Intents.Insert.POSTAL_ISPRIMARY;
2403 
2404             /**
2405              * The extra field for an IM handle.
2406              * <P>Type: String</P>
2407              * @deprecated see {@link android.provider.ContactsContract}
2408              */
2409             @Deprecated
2410             public static final String IM_HANDLE = ContactsContract.Intents.Insert.IM_HANDLE;
2411 
2412             /**
2413              * The extra field for the IM protocol
2414              * <P>Type: the result of {@link Contacts.ContactMethods#encodePredefinedImProtocol}
2415              * or {@link Contacts.ContactMethods#encodeCustomImProtocol}.</P>
2416              * @deprecated see {@link android.provider.ContactsContract}
2417              */
2418             @Deprecated
2419             public static final String IM_PROTOCOL = ContactsContract.Intents.Insert.IM_PROTOCOL;
2420 
2421             /**
2422              * The extra field for the IM isprimary flag.
2423              * <P>Type: boolean</P>
2424              * @deprecated see {@link android.provider.ContactsContract}
2425              */
2426             @Deprecated
2427             public static final String IM_ISPRIMARY = ContactsContract.Intents.Insert.IM_ISPRIMARY;
2428         }
2429     }
2430 }
2431