1568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda/*
2568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda * Copyright (C) 2011 The Android Open Source Project
3568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda *
4568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda * Licensed under the Apache License, Version 2.0 (the "License");
5568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda * you may not use this file except in compliance with the License.
6568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda * You may obtain a copy of the License at
7568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda *
8568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda *      http://www.apache.org/licenses/LICENSE-2.0
9568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda *
10568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda * Unless required by applicable law or agreed to in writing, software
11568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda * distributed under the License is distributed on an "AS IS" BASIS,
12568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda * See the License for the specific language governing permissions and
14568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda * limitations under the License.
15568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda */
16568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda
17568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerdapackage com.android.contacts.calllog;
18568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda
19568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerdaimport android.database.Cursor;
20568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerdaimport android.provider.CallLog.Calls;
21568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda
22568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda/**
23568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda * The query for the call log table.
24568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda */
25568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerdapublic final class CallLogQuery {
26568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    // If you alter this, you must also alter the method that inserts a fake row to the headers
27568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    // in the CallLogQueryHandler class called createHeaderCursorFor().
28568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final String[] _PROJECTION = new String[] {
294813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls._ID,                       // 0
304813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.NUMBER,                    // 1
314813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.DATE,                      // 2
324813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.DURATION,                  // 3
334813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.TYPE,                      // 4
344813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.COUNTRY_ISO,               // 5
354813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.VOICEMAIL_URI,             // 6
364813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.GEOCODED_LOCATION,         // 7
374813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.CACHED_NAME,               // 8
384813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.CACHED_NUMBER_TYPE,        // 9
394813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.CACHED_NUMBER_LABEL,       // 10
404813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.CACHED_LOOKUP_URI,         // 11
414813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.CACHED_MATCHED_NUMBER,     // 12
424813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.CACHED_NORMALIZED_NUMBER,  // 13
434813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda            Calls.CACHED_PHOTO_ID,           // 14
4474628686391735dac1b13409e7f61e9f1514ea20Flavio Lerda            Calls.CACHED_FORMATTED_NUMBER,   // 15
4576821d02351701b3829aa5754dd9a86e417f635fFlavio Lerda            Calls.IS_READ,                   // 16
46568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    };
47568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda
48568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int ID = 0;
49568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int NUMBER = 1;
50568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int DATE = 2;
51568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int DURATION = 3;
52568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int CALL_TYPE = 4;
53568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int COUNTRY_ISO = 5;
54568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int VOICEMAIL_URI = 6;
55568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int GEOCODED_LOCATION = 7;
56b5f6432139f887e6f65e1206e927f57cfb670cc6Flavio Lerda    public static final int CACHED_NAME = 8;
57b5f6432139f887e6f65e1206e927f57cfb670cc6Flavio Lerda    public static final int CACHED_NUMBER_TYPE = 9;
58b5f6432139f887e6f65e1206e927f57cfb670cc6Flavio Lerda    public static final int CACHED_NUMBER_LABEL = 10;
594813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda    public static final int CACHED_LOOKUP_URI = 11;
604813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda    public static final int CACHED_MATCHED_NUMBER = 12;
614813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda    public static final int CACHED_NORMALIZED_NUMBER = 13;
624813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda    public static final int CACHED_PHOTO_ID = 14;
6374628686391735dac1b13409e7f61e9f1514ea20Flavio Lerda    public static final int CACHED_FORMATTED_NUMBER = 15;
6476821d02351701b3829aa5754dd9a86e417f635fFlavio Lerda    public static final int IS_READ = 16;
654813c270af2b5d904437757807541f1f5e19bb93Flavio Lerda    /** The index of the synthetic "section" column in the extended projection. */
6676821d02351701b3829aa5754dd9a86e417f635fFlavio Lerda    public static final int SECTION = 17;
67568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda
68568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    /**
69568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda     * The name of the synthetic "section" column.
70568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda     * <p>
71568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda     * This column identifies whether a row is a header or an actual item, and whether it is
72568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda     * part of the new or old calls.
73568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda     */
74568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final String SECTION_NAME = "section";
75568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    /** The value of the "section" column for the header of the new section. */
76568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int SECTION_NEW_HEADER = 0;
77568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    /** The value of the "section" column for the items of the new section. */
78568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int SECTION_NEW_ITEM = 1;
79568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    /** The value of the "section" column for the header of the old section. */
80568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int SECTION_OLD_HEADER = 2;
81568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    /** The value of the "section" column for the items of the old section. */
82568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final int SECTION_OLD_ITEM = 3;
83568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda
84568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    /** The call log projection including the section name. */
85568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static final String[] EXTENDED_PROJECTION;
86568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    static {
87568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda        EXTENDED_PROJECTION = new String[_PROJECTION.length + 1];
88568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda        System.arraycopy(_PROJECTION, 0, EXTENDED_PROJECTION, 0, _PROJECTION.length);
89568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda        EXTENDED_PROJECTION[_PROJECTION.length] = SECTION_NAME;
90568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    }
91568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda
92568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static boolean isSectionHeader(Cursor cursor) {
93568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda        int section = cursor.getInt(CallLogQuery.SECTION);
94568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda        return section == CallLogQuery.SECTION_NEW_HEADER
95568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda                || section == CallLogQuery.SECTION_OLD_HEADER;
96568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    }
97568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda
98568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    public static boolean isNewSection(Cursor cursor) {
99568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda        int section = cursor.getInt(CallLogQuery.SECTION);
100568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda        return section == CallLogQuery.SECTION_NEW_ITEM
101568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda                || section == CallLogQuery.SECTION_NEW_HEADER;
102568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda    }
103568ad27e706d7c75dd7412e34c2236c772704a04Flavio Lerda}