Contacts.java revision 54b6cfa9a9e5b861a9930af873580d6dc20f773
154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/*
254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * you may not use this file except in compliance with the License.
654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * You may obtain a copy of the License at
754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
1054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * See the License for the specific language governing permissions and
1454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * limitations under the License.
1554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
1654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectpackage android.provider;
1854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.ContentResolver;
2054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.ContentUris;
2154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.ContentValues;
2254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.Context;
2354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.Intent;
2454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.Cursor;
2554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.graphics.Bitmap;
2654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.graphics.BitmapFactory;
2754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.net.Uri;
2854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.text.TextUtils;
2954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Log;
3054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.widget.ImageView;
3154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
3254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport com.android.internal.R;
3354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
3454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.ByteArrayInputStream;
3554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.InputStream;
3654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
3754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/**
3854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * The Contacts provider stores all information about contacts.
3954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
4054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectpublic class Contacts {
4154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String TAG = "Contacts";
4254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
4354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final String AUTHORITY = "contacts";
4454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
4554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
4654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * The content:// style URL for this provider
4754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
4854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final Uri CONTENT_URI =
4954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        Uri.parse("content://" + AUTHORITY);
5054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /** Signifies an email address row that is stored in the ContactMethods table */
5254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int KIND_EMAIL = 1;
5354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /** Signifies a postal address row that is stored in the ContactMethods table */
5454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int KIND_POSTAL = 2;
5554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /** Signifies an IM address row that is stored in the ContactMethods table */
5654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int KIND_IM = 3;
5754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /** Signifies an Organization row that is stored in the Organizations table */
5854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int KIND_ORGANIZATION = 4;
5954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /** Signifies an Phone row that is stored in the Phones table */
6054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int KIND_PHONE = 5;
6154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
6254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * no public constructor since this is a utility class
6454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
6554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private Contacts() {}
6654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
6754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
6854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Columns from the Settings table that other columns join into themselves.
6954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
7054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public interface SettingsColumns {
7154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
7254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The _SYNC_ACCOUNT to which this setting corresponds. This may be null.
7354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
7454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
7554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String _SYNC_ACCOUNT = "_sync_account";
7654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
7754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
7854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The key of this setting.
7954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
8054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
8154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String KEY = "key";
8254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
8354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
8454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The value of this setting.
8554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
8654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
8754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String VALUE = "value";
8854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
8954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
9054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
9154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * The settings over all of the people
9254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
9354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final class Settings implements BaseColumns, SettingsColumns {
9454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
9554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * no public constructor since this is a utility class
9654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
9754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private Settings() {}
9854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
9954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
10054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for this table
10154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
10254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_URI =
10354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/settings");
10454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
10554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
10654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The directory twig for this sub-table
10754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
10854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_DIRECTORY = "settings";
10954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
11054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
11154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The default sort order for this table
11254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
11354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DEFAULT_SORT_ORDER = "key ASC";
11454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
11554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
11654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * A setting that is used to indicate if we should sync down all groups for the
11754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * specified account. For this setting the _SYNC_ACCOUNT column must be set.
11854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * If this isn't set then we will only sync the groups whose SHOULD_SYNC column
11954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * is set to true.
12054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <p>
12154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * This is a boolean setting. It is true if it is set and it is anything other than the
12254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * emptry string or "0".
12354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
12454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String SYNC_EVERYTHING = "syncEverything";
12554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
12654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static String getSetting(ContentResolver cr, String account, String key) {
12754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // For now we only support a single account and the UI doesn't know what
12854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // the account name is, so we're using a global setting for SYNC_EVERYTHING.
12954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // Some day when we add multiple accounts to the UI this should honor the account
13054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // that was asked for.
13154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            String selectString;
13254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            String[] selectArgs;
13354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (false) {
13454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                selectString = (account == null)
13554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        ? "_sync_account is null AND key=?"
13654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        : "_sync_account=? AND key=?";
13754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                selectArgs = (account == null)
13854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                ? new String[]{key}
13954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                : new String[]{account, key};
14054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } else {
14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                selectString = "key=?";
14254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                selectArgs = new String[] {key};
14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
14454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Cursor cursor = cr.query(Settings.CONTENT_URI, new String[]{VALUE},
14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    selectString, selectArgs, null);
14654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
14754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (!cursor.moveToNext()) return null;
14854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return cursor.getString(0);
14954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
15054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                cursor.close();
15154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
15254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
15354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
15454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static void setSetting(ContentResolver cr, String account, String key,
15554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String value) {
15654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            ContentValues values = new ContentValues();
15754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // For now we only support a single account and the UI doesn't know what
15854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // the account name is, so we're using a global setting for SYNC_EVERYTHING.
15954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // Some day when we add multiple accounts to the UI this should honor the account
16054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // that was asked for.
16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            //values.put(_SYNC_ACCOUNT, account);
16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            values.put(KEY, key);
16354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            values.put(VALUE, value);
16454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            cr.update(Settings.CONTENT_URI, values, null, null);
16554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
16654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
16754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
16854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
16954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Columns from the People table that other tables join into themselves.
17054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
17154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public interface PeopleColumns {
17254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
17354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The persons name.
17454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
17554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
17654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String NAME = "name";
17754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
17854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
17954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The display name. If name is not null name, else if number is not null number,
18054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * else if email is not null email.
18154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
18254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
18354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DISPLAY_NAME = "display_name";
18454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
18554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
18654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Notes about the person.
18754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
18854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
18954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String NOTES = "notes";
19054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
19154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
19254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The number of times a person has been contacted
19354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER</P>
19454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
19554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String TIMES_CONTACTED = "times_contacted";
19654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
19754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
19854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The last time a person was contacted.
19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER</P>
20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String LAST_TIME_CONTACTED = "last_time_contacted";
20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * A custom ringtone associated with a person. Not always present.
20554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT (URI to the ringtone)</P>
20654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
20754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CUSTOM_RINGTONE = "custom_ringtone";
20854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
20954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
21054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Whether the person should always be sent to voicemail. Not always
21154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * present.
21254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (0 for false, 1 for true)</P>
21354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
21454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String SEND_TO_VOICEMAIL = "send_to_voicemail";
21554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
21654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
21754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Is the contact starred?
21854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (boolean)</P>
21954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
22054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String STARRED = "starred";
22154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
22254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
22354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The server version of the photo
22454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT (the version number portion of the photo URI)</P>
22554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
22654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String PHOTO_VERSION = "photo_version";
22754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
22854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
22954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
23054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * This table contains people.
23154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
23254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final class People implements BaseColumns, SyncConstValue, PeopleColumns,
23354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            PhonesColumns, PresenceColumns {
23454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
23554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * no public constructor since this is a utility class
23654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
23754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private People() {}
23854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
23954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
24054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for this table
24154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
24254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_URI =
24354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/people");
24454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
24554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
24654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for filtering people by name. The filter
24754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * argument should be passed as an additional path segment after this URI.
24854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
24954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_FILTER_URI =
25054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/people/filter");
25154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
25254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
25354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for the table that holds the deleted
25454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * contacts.
25554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
25654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri DELETED_CONTENT_URI =
25754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/deleted_people");
25854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
25954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
26054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of {@link #CONTENT_URI} providing a directory of
26154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * people.
26254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
26354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/person";
26454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
26554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
26654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
26754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * person.
26854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
26954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/person";
27054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
27154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
27254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The default sort order for this table
27354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
27454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DEFAULT_SORT_ORDER = People.NAME + " ASC";
27554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
27654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
27754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The ID of the persons preferred phone number.
27854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (foreign key to phones table on the _ID field)</P>
27954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
28054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String PRIMARY_PHONE_ID = "primary_phone";
28154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
28254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
28354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The ID of the persons preferred email.
28454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (foreign key to contact_methods table on the
28554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * _ID field)</P>
28654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
28754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String PRIMARY_EMAIL_ID = "primary_email";
28854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
28954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
29054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The ID of the persons preferred organization.
29154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (foreign key to organizations table on the
29254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * _ID field)</P>
29354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
29454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String PRIMARY_ORGANIZATION_ID = "primary_organization";
29554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
29654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
29754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Mark a person as having been contacted.
29854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *
29954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param resolver the ContentResolver to use
30054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param personId the person who was contacted
30154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
30254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static void markAsContacted(ContentResolver resolver, long personId) {
30354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri uri = ContentUris.withAppendedId(CONTENT_URI, personId);
30454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            uri = Uri.withAppendedPath(uri, "update_contact_time");
30554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            ContentValues values = new ContentValues();
30654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // There is a trigger in place that will update TIMES_CONTACTED when
30754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // LAST_TIME_CONTACTED is modified.
30854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            values.put(LAST_TIME_CONTACTED, System.currentTimeMillis());
30954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            resolver.update(uri, values, null, null);
31054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
31154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
31254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
31354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Adds a person to the My Contacts group.
31454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *
31554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param resolver the resolver to use
31654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param personId the person to add to the group
31754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @return the URI of the group membership row
31854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @throws IllegalStateException if the My Contacts group can't be found
31954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
32054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static Uri addToMyContactsGroup(ContentResolver resolver, long personId) {
32154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            long groupId = 0;
32254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Cursor groupsCursor = resolver.query(Groups.CONTENT_URI, GROUPS_PROJECTION,
32354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Groups.SYSTEM_ID + "='" + Groups.GROUP_MY_CONTACTS + "'", null, null);
32454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (groupsCursor != null) {
32554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                try {
32654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    if (groupsCursor.moveToFirst()) {
32754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        groupId = groupsCursor.getLong(0);
32854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    }
32954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } finally {
33054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    groupsCursor.close();
33154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
33254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
33354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
33454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (groupId == 0) {
33554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                throw new IllegalStateException("Failed to find the My Contacts group");
33654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
33754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
33854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return addToGroup(resolver, personId, groupId);
33954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
34054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
34154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
34254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Adds a person to a group referred to by name.
34354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *
34454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param resolver the resolver to use
34554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param personId the person to add to the group
34654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param groupName the name of the group to add the contact to
34754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @return the URI of the group membership row
34854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @throws IllegalStateException if the group can't be found
34954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
35054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static Uri addToGroup(ContentResolver resolver, long personId, String groupName) {
35154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            long groupId = 0;
35254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Cursor groupsCursor = resolver.query(Groups.CONTENT_URI, GROUPS_PROJECTION,
35354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Groups.NAME + "=?", new String[] { groupName }, null);
35454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (groupsCursor != null) {
35554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                try {
35654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    if (groupsCursor.moveToFirst()) {
35754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        groupId = groupsCursor.getLong(0);
35854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    }
35954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } finally {
36054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    groupsCursor.close();
36154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
36254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
36354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
36454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (groupId == 0) {
36554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                throw new IllegalStateException("Failed to find the My Contacts group");
36654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
36754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
36854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return addToGroup(resolver, personId, groupId);
36954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
37054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
37154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
37254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Adds a person to a group.
37354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *
37454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param resolver the resolver to use
37554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param personId the person to add to the group
37654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param groupId the group to add the person to
37754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @return the URI of the group membership row
37854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
37954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static Uri addToGroup(ContentResolver resolver, long personId, long groupId) {
38054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            ContentValues values = new ContentValues();
38154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            values.put(GroupMembership.PERSON_ID, personId);
38254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            values.put(GroupMembership.GROUP_ID, groupId);
38354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return resolver.insert(GroupMembership.CONTENT_URI, values);
38454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
38554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
38654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private static final String[] GROUPS_PROJECTION = new String[] {
38754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Groups._ID,
38854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        };
38954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
39054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
39154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Creates a new contacts and adds it to the "My Contacts" group.
39254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *
39354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param resolver the ContentResolver to use
39454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param values the values to use when creating the contact
39554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @return the URI of the contact, or null if the operation fails
39654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
39754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static Uri createPersonInMyContactsGroup(ContentResolver resolver,
39854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                ContentValues values) {
39954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
40054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri contactUri = resolver.insert(People.CONTENT_URI, values);
40154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (contactUri == null) {
40254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                Log.e(TAG, "Failed to create the contact");
40354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return null;
40454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
40554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
40654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (addToMyContactsGroup(resolver, ContentUris.parseId(contactUri)) == null) {
40754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                resolver.delete(contactUri, null, null);
40854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return null;
40954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
41054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return contactUri;
41154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
41254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
41354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static Cursor queryGroups(ContentResolver resolver, long person) {
41454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return resolver.query(GroupMembership.CONTENT_URI, null, "person=?",
41554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    new String[]{String.valueOf(person)}, Groups.DEFAULT_SORT_ORDER);
41654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
41754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
41854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
41954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Set the photo for this person. data may be null
42054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param cr the ContentResolver to use
42154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param person the Uri of the person whose photo is to be updated
42254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param data the byte[] that represents the photo
42354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
42454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static void setPhotoData(ContentResolver cr, Uri person, byte[] data) {
42554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri photoUri = Uri.withAppendedPath(person, Contacts.Photos.CONTENT_DIRECTORY);
42654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            ContentValues values = new ContentValues();
42754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            values.put(Photos.DATA, data);
42854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            cr.update(photoUri, values, null, null);
42954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
43054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
43154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
43254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Opens an InputStream for the person's photo and returns the photo as a Bitmap.
43354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * If the person's photo isn't present returns the placeholderImageResource instead.
43454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param person the person whose photo should be used
43554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
43654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static InputStream openContactPhotoInputStream(ContentResolver cr, Uri person) {
43754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri photoUri = Uri.withAppendedPath(person, Contacts.Photos.CONTENT_DIRECTORY);
43854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Cursor cursor = cr.query(photoUri, new String[]{Photos.DATA}, null, null, null);
43954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
44054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (!cursor.moveToNext()) {
44154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return null;
44254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
44354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                byte[] data = cursor.getBlob(0);
44454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (data == null) {
44554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return null;
44654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
44754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return new ByteArrayInputStream(data);
44854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
44954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                cursor.close();
45054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
45154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
45254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
45354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
45454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Opens an InputStream for the person's photo and returns the photo as a Bitmap.
45554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * If the person's photo isn't present returns the placeholderImageResource instead.
45654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param context the Context
45754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param person the person whose photo should be used
45854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param placeholderImageResource the image resource to use if the person doesn't
45954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *   have a photo
46054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param options the decoding options, can be set to null
46154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
46254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static Bitmap loadContactPhoto(Context context, Uri person,
46354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                int placeholderImageResource, BitmapFactory.Options options) {
46454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (person == null) {
46554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return loadPlaceholderPhoto(placeholderImageResource, context, options);
46654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
46754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
46854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            InputStream stream = openContactPhotoInputStream(context.getContentResolver(), person);
46954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Bitmap bm = stream != null ? BitmapFactory.decodeStream(stream, null, options) : null;
47054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (bm == null) {
47154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                bm = loadPlaceholderPhoto(placeholderImageResource, context, options);
47254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
47354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return bm;
47454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
47554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
47654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private static Bitmap loadPlaceholderPhoto(int placeholderImageResource, Context context,
47754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                BitmapFactory.Options options) {
47854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (placeholderImageResource == 0) {
47954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return null;
48054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
48154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return BitmapFactory.decodeResource(context.getResources(),
48254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    placeholderImageResource, options);
48354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
48454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
48554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
48654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * A sub directory of a single person that contains all of their Phones.
48754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
48854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final class Phones implements BaseColumns, PhonesColumns,
48954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                PeopleColumns {
49054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
49154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * no public constructor since this is a utility class
49254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
49354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            private Phones() {}
49454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
49554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
49654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The directory twig for this sub-table
49754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
49854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String CONTENT_DIRECTORY = "phones";
49954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
50054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
50154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The default sort order for this table
50254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
50354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String DEFAULT_SORT_ORDER = "number ASC";
50454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
50554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
50654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
50754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * A subdirectory of a single person that contains all of their
50854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * ContactMethods.
50954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
51054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final class ContactMethods
51154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                implements BaseColumns, ContactMethodsColumns, PeopleColumns {
51254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
51354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * no public constructor since this is a utility class
51454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
51554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            private ContactMethods() {}
51654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
51754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
51854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The directory twig for this sub-table
51954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
52054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String CONTENT_DIRECTORY = "contact_methods";
52154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
52254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
52354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The default sort order for this table
52454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
52554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String DEFAULT_SORT_ORDER = "data ASC";
52654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
52754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
52854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
52954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The extensions for a person
53054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
53154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static class Extensions implements BaseColumns, ExtensionsColumns {
53254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
53354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * no public constructor since this is a utility class
53454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
53554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            private Extensions() {}
53654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
53754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
53854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The directory twig for this sub-table
53954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
54054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String CONTENT_DIRECTORY = "extensions";
54154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
54254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
54354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The default sort order for this table
54454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
54554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String DEFAULT_SORT_ORDER = "name ASC";
54654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
54754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
54854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The ID of the person this phone number is assigned to.
54954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: INTEGER (long)</P>
55054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
55154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String PERSON_ID = "person";
55254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
55354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
55454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
55554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
55654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Columns from the groups table.
55754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
55854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public interface GroupsColumns {
55954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
56054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The group name.
56154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
56254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
56354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String NAME = "name";
56454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
56554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
56654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Notes about the group.
56754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
56854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
56954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String NOTES = "notes";
57054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
57154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
57254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Whether this group should be synced if the SYNC_EVERYTHING settings is false
57354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * for this group's account.
57454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (boolean)</P>
57554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
57654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String SHOULD_SYNC = "should_sync";
57754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
57854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
57954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The ID of this group if it is a System Group, null otherwise.
58054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
58154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
58254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String SYSTEM_ID = "system_id";
58354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
58454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
58554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
58654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * This table contains the groups for an account.
58754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
58854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final class Groups
58954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            implements BaseColumns, SyncConstValue, GroupsColumns {
59054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
59154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * no public constructor since this is a utility class
59254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
59354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private Groups() {}
59454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
59554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
59654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for this table
59754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
59854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_URI =
59954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/groups");
60054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
60154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
60254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for the table that holds the deleted
60354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * groups.
60454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
60554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri DELETED_CONTENT_URI =
60654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/deleted_groups");
60754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
60854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
60954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of {@link #CONTENT_URI} providing a directory of
61054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * groups.
61154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
61254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroup";
61354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
61454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
61554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
61654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * group.
61754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
61854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contactsgroup";
61954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
62054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
62154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The default sort order for this table
62254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
62354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DEFAULT_SORT_ORDER = NAME + " ASC";
62454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
62554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
62654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *
62754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
62854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String GROUP_ANDROID_STARRED = "Starred in Android";
62954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
63054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
63154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The "My Contacts" system group.
63254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
63354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String GROUP_MY_CONTACTS = "Contacts";
63454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
63554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
63654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
63754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Columns from the Phones table that other columns join into themselves.
63854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
63954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public interface PhonesColumns {
64054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
64154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The type of the the phone number.
64254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (one of the constants below)</P>
64354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
64454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String TYPE = "type";
64554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
64654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_CUSTOM = 0;
64754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_HOME = 1;
64854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_MOBILE = 2;
64954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_WORK = 3;
65054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_FAX_WORK = 4;
65154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_FAX_HOME = 5;
65254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_PAGER = 6;
65354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_OTHER = 7;
65454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
65554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
65654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The user provided label for the phone number, only used if TYPE is TYPE_CUSTOM.
65754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
65854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
65954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String LABEL = "label";
66054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
66154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
66254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The phone number as the user entered it.
66354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
66454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
66554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String NUMBER = "number";
66654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
66754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
66854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The normalized phone number
66954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
67054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
67154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String NUMBER_KEY = "number_key";
67254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
67354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
67454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Whether this is the primary phone number
67554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (if set, non-0 means true)</P>
67654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
67754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String ISPRIMARY = "isprimary";
67854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
67954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
68054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
68154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * This table stores phone numbers and a reference to the person that the
68254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * contact method belongs to. Phone numbers are stored separately from
68354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * other contact methods to make caller ID lookup more efficient.
68454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
68554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final class Phones
68654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            implements BaseColumns, PhonesColumns, PeopleColumns {
68754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
68854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * no public constructor since this is a utility class
68954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
69054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private Phones() {}
69154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
69254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final CharSequence getDisplayLabel(Context context, int type,
69354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                CharSequence label, CharSequence[] labelArray) {
69454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            CharSequence display = "";
69554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
69654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (type != People.Phones.TYPE_CUSTOM) {
69754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                CharSequence[] labels = labelArray != null? labelArray
69854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        : context.getResources().getTextArray(
69954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                com.android.internal.R.array.phoneTypes);
70054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                try {
70154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    display = labels[type - 1];
70254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } catch (ArrayIndexOutOfBoundsException e) {
70354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    display = labels[People.Phones.TYPE_HOME - 1];
70454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
70554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } else {
70654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (!TextUtils.isEmpty(label)) {
70754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    display = label;
70854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
70954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
71054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return display;
71154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
71254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
71354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final CharSequence getDisplayLabel(Context context, int type,
71454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                CharSequence label) {
71554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return getDisplayLabel(context, type, label, null);
71654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
71754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
71854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
71954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for this table
72054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
72154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_URI =
72254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/phones");
72354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
72454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
72554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for filtering phone numbers
72654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
72754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_FILTER_URL =
72854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/phones/filter");
72954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
73054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
73154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of {@link #CONTENT_URI} providing a directory of
73254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * phones.
73354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
73454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/phone";
73554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
73654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
73754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
73854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * phone.
73954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
74054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone";
74154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
74254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
74354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The default sort order for this table
74454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
74554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DEFAULT_SORT_ORDER = "name ASC";
74654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
74754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
74854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The ID of the person this phone number is assigned to.
74954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (long)</P>
75054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
75154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String PERSON_ID = "person";
75254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
75354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
75454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final class GroupMembership implements BaseColumns, GroupsColumns {
75554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
75654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * no public constructor since this is a utility class
75754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
75854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private GroupMembership() {}
75954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
76054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
76154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for this table
76254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
76354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_URI =
76454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/groupmembership");
76554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
76654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
76754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for this table
76854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
76954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri RAW_CONTENT_URI =
77054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/groupmembershipraw");
77154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
77254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
77354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The directory twig for this sub-table
77454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
77554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_DIRECTORY = "groupmembership";
77654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
77754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of {@link #CONTENT_URI} providing a directory of all
77854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * person groups.
77954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
78054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroupmembership";
78154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
78254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
78354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
78454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * person group.
78554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
78654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_ITEM_TYPE =
78754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                "vnd.android.cursor.item/contactsgroupmembership";
78854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
78954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
79054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The default sort order for this table
79154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
79254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DEFAULT_SORT_ORDER = "group_id ASC";
79354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
79454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
79554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The row id of the accounts group.
79654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
79754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
79854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String GROUP_ID = "group_id";
79954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
80054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
80154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The sync id of the group.
80254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
80354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
80454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String GROUP_SYNC_ID = "group_sync_id";
80554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
80654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
80754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The account of the group.
80854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
80954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
81054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String GROUP_SYNC_ACCOUNT = "group_sync_account";
81154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
81254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
81354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The row id of the person.
81454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
81554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
81654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String PERSON_ID = "person";
81754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
81854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
81954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
82054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Columns from the ContactMethods table that other tables join into
82154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * themseleves.
82254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
82354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public interface ContactMethodsColumns {
82454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
82554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The kind of the the contact method. For example, email address,
82654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * postal address, etc.
82754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (one of the values below)</P>
82854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
82954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String KIND = "kind";
83054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
83154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
83254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The type of the contact method, must be one of the types below.
83354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (one of the values below)</P>
83454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
83554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String TYPE = "type";
83654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_CUSTOM = 0;
83754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_HOME = 1;
83854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_WORK = 2;
83954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_OTHER = 3;
84054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
84154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
84254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The user defined label for the the contact method.
84354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
84454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
84554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String LABEL = "label";
84654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
84754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
84854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The data for the contact method.
84954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
85054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
85154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DATA = "data";
85254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
85354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
85454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Auxiliary data for the contact method.
85554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
85654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
85754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String AUX_DATA = "aux_data";
85854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
85954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
86054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Whether this is the primary organization
86154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (if set, non-0 means true)</P>
86254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
86354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String ISPRIMARY = "isprimary";
86454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
86554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
86654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
86754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * This table stores all non-phone contact methods and a reference to the
86854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * person that the contact method belongs to.
86954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
87054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final class ContactMethods
87154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            implements BaseColumns, ContactMethodsColumns, PeopleColumns {
87254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
87354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The column with latitude data for postal locations
87454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: REAL</P>
87554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
87654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String POSTAL_LOCATION_LATITUDE = DATA;
87754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
87854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
87954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The column with longitude data for postal locations
88054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: REAL</P>
88154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
88254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String POSTAL_LOCATION_LONGITUDE = AUX_DATA;
88354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
88454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
88554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The predefined IM protocol types. The protocol can either be non-present, one
88654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * of these types, or a free-form string. These cases are encoded in the AUX_DATA
88754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * column as:
88854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *  - null
88954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *  - pre:<an integer, one of the protocols below>
89054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *  - custom:<a string>
89154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
89254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int PROTOCOL_AIM = 0;
89354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int PROTOCOL_MSN = 1;
89454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int PROTOCOL_YAHOO = 2;
89554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int PROTOCOL_SKYPE = 3;
89654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int PROTOCOL_QQ = 4;
89754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int PROTOCOL_GOOGLE_TALK = 5;
89854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int PROTOCOL_ICQ = 6;
89954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int PROTOCOL_JABBER = 7;
90054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
90154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static String encodePredefinedImProtocol(int protocol) {
90254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return "pre:" + protocol;
90354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
90454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
90554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static String encodeCustomImProtocol(String protocolString) {
90654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return "custom:" + protocolString;
90754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
90854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
90954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static Object decodeImProtocol(String encodedString) {
91054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (encodedString == null) {
91154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return null;
91254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
91354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
91454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (encodedString.startsWith("pre:")) {
91554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return Integer.parseInt(encodedString.substring(4));
91654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
91754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
91854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (encodedString.startsWith("custom:")) {
91954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return encodedString.substring(7);
92054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
92154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
92254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            throw new IllegalArgumentException(
92354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "the value is not a valid encoded protocol, " + encodedString);
92454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
92554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
92654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
92754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * This looks up the provider category defined in
92854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * {@link android.provider.Im.ProviderCategories} from the predefined IM protocol id.
92954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * This is used for interacting with the IM application.
93054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *
93154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param protocol the protocol ID
93254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @return the provider category the IM app uses for the given protocol, or null if no
93354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * provider is defined for the given protocol
93454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @hide
93554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
93654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static String lookupProviderCategoryFromId(int protocol) {
93754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            switch (protocol) {
93854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case PROTOCOL_GOOGLE_TALK:
93954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return Im.ProviderCategories.GTALK;
94054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case PROTOCOL_AIM:
94154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return Im.ProviderCategories.AIM;
94254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case PROTOCOL_MSN:
94354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return Im.ProviderCategories.MSN;
94454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case PROTOCOL_YAHOO:
94554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return Im.ProviderCategories.YAHOO;
94654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case PROTOCOL_ICQ:
94754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return Im.ProviderCategories.ICQ;
94854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
94954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return null;
95054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
95154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
95254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
95354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * no public constructor since this is a utility class
95454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
95554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private ContactMethods() {}
95654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
95754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final CharSequence getDisplayLabel(Context context, int kind,
95854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                int type, CharSequence label) {
95954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            CharSequence display = "";
96054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            switch (kind) {
96154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case KIND_EMAIL: {
96254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    if (type != People.ContactMethods.TYPE_CUSTOM) {
96354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        CharSequence[] labels = context.getResources().getTextArray(
96454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                com.android.internal.R.array.emailAddressTypes);
96554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        try {
96654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            display = labels[type - 1];
96754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        } catch (ArrayIndexOutOfBoundsException e) {
96854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            display = labels[ContactMethods.TYPE_HOME - 1];
96954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        }
97054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    } else {
97154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        if (!TextUtils.isEmpty(label)) {
97254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            display = label;
97354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        }
97454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    }
97554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    break;
97654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
97754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
97854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case KIND_POSTAL: {
97954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    if (type != People.ContactMethods.TYPE_CUSTOM) {
98054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        CharSequence[] labels = context.getResources().getTextArray(
98154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                com.android.internal.R.array.postalAddressTypes);
98254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        try {
98354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            display = labels[type - 1];
98454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        } catch (ArrayIndexOutOfBoundsException e) {
98554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            display = labels[ContactMethods.TYPE_HOME - 1];
98654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        }
98754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    } else {
98854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        if (!TextUtils.isEmpty(label)) {
98954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            display = label;
99054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        }
99154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    }
99254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    break;
99354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
99454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
99554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                default:
99654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    display = context.getString(R.string.untitled);
99754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
99854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return display;
99954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
100054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
100154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
100254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Add a longitude and latitude location to a postal address.
100354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *
100454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param context the context to use when updating the database
100554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param postalId the address to update
100654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param latitude the latitude for the address
100754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param longitude the longitude for the address
100854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
100954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public void addPostalLocation(Context context, long postalId,
101054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                double latitude, double longitude) {
101154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            final ContentResolver resolver = context.getContentResolver();
101254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // Insert the location
101354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            ContentValues values = new ContentValues(2);
101454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            values.put(POSTAL_LOCATION_LATITUDE, latitude);
101554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            values.put(POSTAL_LOCATION_LONGITUDE, longitude);
101654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri loc = resolver.insert(CONTENT_URI, values);
101754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            long locId = ContentUris.parseId(loc);
101854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
101954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // Update the postal address
102054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            values.clear();
102154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            values.put(AUX_DATA, locId);
102254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            resolver.update(ContentUris.withAppendedId(CONTENT_URI, postalId), values, null, null);
102354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
102454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
102554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
102654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for this table
102754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
102854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_URI =
102954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/contact_methods");
103054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
103154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
103254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for sub-directory of e-mail addresses.
103354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
103454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_EMAIL_URI =
103554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/contact_methods/email");
103654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
103754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
103854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of {@link #CONTENT_URI} providing a directory of
103954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * phones.
104054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
104154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact-methods";
104254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
104354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
104454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of a {@link #CONTENT_EMAIL_URI} sub-directory of\
104554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * multiple {@link Contacts#KIND_EMAIL} entries.
104654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
104754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_EMAIL_TYPE = "vnd.android.cursor.dir/email";
104854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
104954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
105054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of a {@link #CONTENT_EMAIL_URI} sub-directory of\
105154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * multiple {@link Contacts#KIND_POSTAL} entries.
105254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
105354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_POSTAL_TYPE = "vnd.android.cursor.dir/postal-address";
105454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
105554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
105654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of a {@link #CONTENT_URI} sub-directory of a single
105754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * {@link Contacts#KIND_EMAIL} entry.
105854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
105954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_EMAIL_ITEM_TYPE = "vnd.android.cursor.item/email";
106054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
106154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
106254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of a {@link #CONTENT_URI} sub-directory of a single
106354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * {@link Contacts#KIND_POSTAL} entry.
106454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
106554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_POSTAL_ITEM_TYPE
106654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                = "vnd.android.cursor.item/postal-address";
106754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
106854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
106954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of a {@link #CONTENT_URI} sub-directory of a single
107054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * {@link Contacts#KIND_IM} entry.
107154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
107254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_IM_ITEM_TYPE = "vnd.android.cursor.item/jabber-im";
107354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
107454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
107554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The default sort order for this table
107654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
107754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DEFAULT_SORT_ORDER = "name ASC";
107854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
107954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
108054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The ID of the person this contact method is assigned to.
108154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (long)</P>
108254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
108354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String PERSON_ID = "person";
108454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
108554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
108654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
108754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * The IM presence columns with some contacts specific columns mixed in.
108854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
108954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public interface PresenceColumns extends Im.CommonPresenceColumns {
109054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
109154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The IM service the presence is coming from. Formatted using either
109254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * {@link Contacts.ContactMethods#encodePredefinedImProtocol} or
109354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * {@link Contacts.ContactMethods#encodeCustomImProtocol}.
109454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: STRING</P>
109554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
109654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String IM_PROTOCOL = "im_protocol";
109754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
109854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
109954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The IM handle the presence item is for. The handle is scoped to
110054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * the {@link #IM_PROTOCOL}.
110154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: STRING</P>
110254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
110354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String IM_HANDLE = "im_handle";
110454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
110554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
110654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The IM account for the local user that the presence data came from.
110754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: STRING</P>
110854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
110954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String IM_ACCOUNT = "im_account";
111054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
111154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
111254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
111354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Contains presence information about contacts.
111454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @hide
111554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
111654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final class Presence
111754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            implements BaseColumns, PresenceColumns, PeopleColumns {
111854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
111954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for this table
112054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
112154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_URI =
112254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/presence");
112354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
112454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
112554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The ID of the person this presence item is assigned to.
112654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (long)</P>
112754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
112854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String PERSON_ID = "person";
112954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
113054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
113154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Gets the resource ID for the proper presence icon.
113254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *
113354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param status the status to get the icon for
113454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @return the resource ID for the proper presence icon
113554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
113654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int getPresenceIconResourceId(int status) {
113754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            switch (status) {
113854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case Contacts.People.AVAILABLE:
113954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return com.android.internal.R.drawable.presence_online;
114054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
114154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case Contacts.People.IDLE:
114254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case Contacts.People.AWAY:
114354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return com.android.internal.R.drawable.presence_away;
114454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
114554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case Contacts.People.DO_NOT_DISTURB:
114654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return com.android.internal.R.drawable.presence_busy;
114754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
114854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case Contacts.People.INVISIBLE:
114954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return com.android.internal.R.drawable.presence_invisible;
115054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
115154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                case Contacts.People.OFFLINE:
115254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                default:
115354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    return com.android.internal.R.drawable.presence_offline;
115454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
115554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
115654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
115754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
115854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Sets a presence icon to the proper graphic
115954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         *
116054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param icon the icon to to set
116154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * @param serverStatus that status
116254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
116354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final void setPresenceIcon(ImageView icon, int serverStatus) {
116454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            icon.setImageResource(getPresenceIconResourceId(serverStatus));
116554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
116654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
116754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
116854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
116954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Columns from the Organizations table that other columns join into themselves.
117054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
117154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public interface OrganizationColumns {
117254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
117354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The type of the the phone number.
117454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (one of the constants below)</P>
117554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
117654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String TYPE = "type";
117754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
117854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_CUSTOM = 0;
117954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_WORK = 1;
118054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final int TYPE_OTHER = 2;
118154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
118254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
118354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The user provided label, only used if TYPE is TYPE_CUSTOM.
118454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
118554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
118654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String LABEL = "label";
118754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
118854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
118954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The name of the company for this organization.
119054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
119154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
119254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String COMPANY = "company";
119354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
119454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
119554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The title within this organization.
119654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
119754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
119854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String TITLE = "title";
119954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
120054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
120154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The person this organization is tied to.
120254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
120354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
120454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String PERSON_ID = "person";
120554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
120654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
120754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Whether this is the primary organization
120854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (if set, non-0 means true)</P>
120954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
121054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String ISPRIMARY = "isprimary";
121154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
121254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
121354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
121454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * A sub directory of a single person that contains all of their Phones.
121554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
121654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final class Organizations implements BaseColumns, OrganizationColumns {
121754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
121854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * no public constructor since this is a utility class
121954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
122054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private Organizations() {}
122154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
122254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final CharSequence getDisplayLabel(Context context, int type,
122354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                CharSequence label) {
122454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            CharSequence display = "";
122554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
122654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (type != TYPE_CUSTOM) {
122754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                CharSequence[] labels = context.getResources().getTextArray(
122854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        com.android.internal.R.array.organizationTypes);
122954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                try {
123054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    display = labels[type - 1];
123154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } catch (ArrayIndexOutOfBoundsException e) {
123254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    display = labels[People.Phones.TYPE_HOME - 1];
123354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
123454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } else {
123554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (!TextUtils.isEmpty(label)) {
123654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    display = label;
123754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
123854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
123954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return display;
124054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
124154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
124254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
124354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for this table
124454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
124554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_URI =
124654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/organizations");
124754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
124854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
124954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The directory twig for this sub-table
125054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
125154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_DIRECTORY = "organizations";
125254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
125354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
125454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The default sort order for this table
125554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
125654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DEFAULT_SORT_ORDER = "company, title, isprimary ASC";
125754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
125854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
125954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
126054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Columns from the Photos table that other columns join into themselves.
126154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
126254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public interface PhotosColumns {
126354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
126454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The _SYNC_VERSION of the photo that was last downloaded
126554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
126654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
126754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String LOCAL_VERSION = "local_version";
126854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
126954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
127054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The person this photo is associated with.
127154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
127254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
127354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String PERSON_ID = "person";
127454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
127554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
127654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * non-zero if a download is required and the photo isn't marked as a bad resource.
127754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * You must specify this in the columns in order to use it in the where clause.
127854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER(boolean)</P>
127954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
128054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DOWNLOAD_REQUIRED = "download_required";
128154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
128254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
128354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * non-zero if this photo is known to exist on the server
128454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER(boolean)</P>
128554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
128654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String EXISTS_ON_SERVER = "exists_on_server";
128754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
128854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
128954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Contains the description of the upload or download error from
129054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * the previous attempt. If null then the previous attempt succeeded.
129154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
129254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
129354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String SYNC_ERROR = "sync_error";
129454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
129554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
129654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The image data, or null if there is no image.
129754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: BLOB</P>
129854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
129954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DATA = "data";
130054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
130154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
130254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
130354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
130454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * The photos over all of the people
130554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
130654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final class Photos implements BaseColumns, PhotosColumns, SyncConstValue {
130754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
130854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * no public constructor since this is a utility class
130954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
131054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private Photos() {}
131154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
131254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
131354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for this table
131454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
131554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_URI =
131654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/photos");
131754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
131854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
131954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The directory twig for this sub-table
132054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
132154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_DIRECTORY = "photo";
132254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
132354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
132454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The default sort order for this table
132554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
132654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DEFAULT_SORT_ORDER = "person ASC";
132754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
132854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
132954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public interface ExtensionsColumns {
133054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
133154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The name of this extension. May not be null. There may be at most one row for each name.
133254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
133354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
133454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String NAME = "name";
133554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
133654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
133754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The value of this extension. May not be null.
133854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: TEXT</P>
133954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
134054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String VALUE = "value";
134154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
134254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
134354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
134454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * The extensions for a person
134554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
134654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final class Extensions implements BaseColumns, ExtensionsColumns {
134754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
134854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * no public constructor since this is a utility class
134954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
135054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private Extensions() {}
135154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
135254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
135354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The content:// style URL for this table
135454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
135554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final Uri CONTENT_URI =
135654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Uri.parse("content://contacts/extensions");
135754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
135854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
135954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of {@link #CONTENT_URI} providing a directory of
136054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * phones.
136154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
136254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_extensions";
136354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
136454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
136554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
136654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * phone.
136754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
136854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_extensions";
136954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
137054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The default sort order for this table
137154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
137254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String DEFAULT_SORT_ORDER = "person, name ASC";
137354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
137454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
137554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * The ID of the person this phone number is assigned to.
137654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * <P>Type: INTEGER (long)</P>
137754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
137854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String PERSON_ID = "person";
137954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
138054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
138154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
138254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Contains helper classes used to create or manage {@link android.content.Intent Intents}
138354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * that involve contacts.
138454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
138554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final class Intents {
138654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
138754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * This is the intent that is fired when a search suggestion is clicked on.
138854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
138954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String SEARCH_SUGGESTION_CLICKED =
139054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                "android.provider.Contacts.SEARCH_SUGGESTION_CLICKED";
139154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
139254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
139354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * This is the intent that is fired when a search suggestion for dialing a number
139454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * is clicked on.
139554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
139654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED =
139754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                "android.provider.Contacts.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED";
139854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
139954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
140054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * This is the intent that is fired when a search suggestion for creating a contact
140154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * is clicked on.
140254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
140354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED =
140454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                "android.provider.Contacts.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED";
140554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
140654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
140754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Starts an Activity that lets the user pick a contact to attach an image to.
140854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * After picking the contact it launches the image cropper in face detection mode.
140954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
141054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final String ATTACH_IMAGE =
141154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                "com.android.contacts.action.ATTACH_IMAGE";
141254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
141354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
141454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Intents related to the Contacts app UI.
141554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
141654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final class UI {
141754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
141854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The action for the default contacts list tab.
141954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
142054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String LIST_DEFAULT =
142154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "com.android.contacts.action.LIST_DEFAULT";
142254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
142354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
142454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The action for the contacts list tab.
142554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
142654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String LIST_GROUP_ACTION =
142754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "com.android.contacts.action.LIST_GROUP";
142854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
142954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
143054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * When in LIST_GROUP_ACTION mode, this is the group to display.
143154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
143254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String GROUP_NAME_EXTRA_KEY = "com.android.contacts.extra.GROUP";
143354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
143454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
143554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The action for the all contacts list tab.
143654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
143754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String LIST_ALL_CONTACTS_ACTION =
143854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "com.android.contacts.action.LIST_ALL_CONTACTS";
143954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
144054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
144154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The action for the contacts with phone numbers list tab.
144254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
144354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String LIST_CONTACTS_WITH_PHONES_ACTION =
144454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "com.android.contacts.action.LIST_CONTACTS_WITH_PHONES";
144554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
144654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
144754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The action for the starred contacts list tab.
144854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
144954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String LIST_STARRED_ACTION =
145054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "com.android.contacts.action.LIST_STARRED";
145154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
145254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
145354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The action for the frequent contacts list tab.
145454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
145554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String LIST_FREQUENT_ACTION =
145654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "com.android.contacts.action.LIST_FREQUENT";
145754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
145854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
145954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The action for the "strequent" contacts list tab. It first lists the starred
146054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * contacts in alphabetical order and then the frequent contacts in descending
146154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * order of the number of times they have been contacted.
146254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
146354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String LIST_STREQUENT_ACTION =
146454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "com.android.contacts.action.LIST_STREQUENT";
146554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
146654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
146754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * A key for to be used as an intent extra to set the activity
146854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * title to a custom String value.
146954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
147054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String TITLE_EXTRA_KEY =
147154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                "com.android.contacts.extra.TITLE_EXTRA";
147254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
147354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
147454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * Activity Action: Display a filtered list of contacts
147554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <p>
147654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * Input: Extra field {@link #FILTER_TEXT_EXTRA_KEY} is the text to use for
147754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * filtering
147854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <p>
147954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * Output: Nothing.
148054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
148154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String FILTER_CONTACTS_ACTION =
148254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                "com.android.contacts.action.FILTER_CONTACTS";
148354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
148454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
148554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * Used as an int extra field in {@link #FILTER_CONTACTS_ACTION}
148654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * intents to supply the text on which to filter.
148754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
148854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String FILTER_TEXT_EXTRA_KEY =
148954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                "com.android.contacts.extra.FILTER_TEXT";
149054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
149154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
149254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
149354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Convenience class that contains string constants used
149454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * to create contact {@link android.content.Intent Intents}.
149554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
149654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        public static final class Insert {
149754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /** The action code to use when adding a contact */
149854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String ACTION = Intent.ACTION_INSERT;
149954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
150054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
150154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * If present, forces a bypass of quick insert mode.
150254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
150354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String FULL_MODE = "full_mode";
150454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
150554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
150654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the contact name.
150754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: String</P>
150854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
150954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String NAME = "name";
151054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
151154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
151254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the contact company.
151354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: String</P>
151454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
151554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String COMPANY = "company";
151654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
151754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
151854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the contact job title.
151954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: String</P>
152054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
152154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String JOB_TITLE = "job_title";
152254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
152354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
152454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the contact notes.
152554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: String</P>
152654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
152754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String NOTES = "notes";
152854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
152954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
153054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the contact phone number.
153154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: String</P>
153254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
153354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String PHONE = "phone";
153454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
153554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
153654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the contact phone number type.
153754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: Either an integer value from {@link android.provider.Contacts.PhonesColumns PhonesColumns},
153854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             *  or a string specifying a type and label.</P>
153954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
154054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String PHONE_TYPE = "phone_type";
154154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
154254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
154354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the phone isprimary flag.
154454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: boolean</P>
154554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
154654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String PHONE_ISPRIMARY = "phone_isprimary";
154754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
154854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
154954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the contact email address.
155054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: String</P>
155154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
155254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String EMAIL = "email";
155354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
155454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
155554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the contact email type.
155654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: Either an integer value from {@link android.provider.Contacts.ContactMethodsColumns ContactMethodsColumns}
155754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             *  or a string specifying a type and label.</P>
155854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
155954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String EMAIL_TYPE = "email_type";
156054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
156154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
156254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the email isprimary flag.
156354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: boolean</P>
156454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
156554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String EMAIL_ISPRIMARY = "email_isprimary";
156654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
156754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
156854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the contact postal address.
156954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: String</P>
157054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
157154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String POSTAL = "postal";
157254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
157354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
157454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the contact postal address type.
157554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: Either an integer value from {@link android.provider.Contacts.ContactMethodsColumns ContactMethodsColumns}
157654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             *  or a string specifying a type and label.</P>
157754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
157854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String POSTAL_TYPE = "postal_type";
157954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
158054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
158154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the postal isprimary flag.
158254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: boolean</P>
158354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
158454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String POSTAL_ISPRIMARY = "postal_isprimary";
158554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
158654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
158754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for an IM handle.
158854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: String</P>
158954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
159054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String IM_HANDLE = "im_handle";
159154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
159254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
159354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the IM protocol
159454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: the result of {@link Contacts.ContactMethods#encodePredefinedImProtocol}
159554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * or {@link Contacts.ContactMethods#encodeCustomImProtocol}.</P>
159654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
159754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String IM_PROTOCOL = "im_protocol";
159854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
159954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /**
160054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * The extra field for the IM isprimary flag.
160154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * <P>Type: boolean</P>
160254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
160354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            public static final String IM_ISPRIMARY = "im_isprimary";
160454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
160554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
160654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
1607