19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.provider; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik 203672696dc542674f8b54f83cd00c616b4a9fd4adRoboErikimport android.annotation.SdkConstant; 213672696dc542674f8b54f83cd00c616b4a9fd4adRoboErikimport android.annotation.SdkConstant.SdkConstantType; 2237960c7f58197404d2331a0ea81194ffc98552c1Michael Chanimport android.app.Activity; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.AlarmManager; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.PendingIntent; 2564a556d755d27b1182897e9243cf4f3016e76a88Marc Blankimport android.content.ContentProviderClient; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentUris; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 30328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintanaimport android.content.CursorEntityIterator; 31328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintanaimport android.content.Entity; 3264a556d755d27b1182897e9243cf4f3016e76a88Marc Blankimport android.content.EntityIterator; 3364a556d755d27b1182897e9243cf4f3016e76a88Marc Blankimport android.content.Intent; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 35328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintanaimport android.database.DatabaseUtils; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 37cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chanimport android.os.RemoteException; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.format.DateUtils; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.format.Time; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 43260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <p> 44260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * The contract between the calendar provider and applications. Contains 45260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * definitions for the supported URIs and data columns. 46260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * </p> 47260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <h3>Overview</h3> 48260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <p> 49260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * CalendarContract defines the data model of calendar and event related 50260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * information. This data is stored in a number of tables: 51260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * </p> 52260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <ul> 53260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li>The {@link Calendars} table holds the calendar specific information. Each 54260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * row in this table contains the details for a single calendar, such as the 55260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * name, color, sync info, etc.</li> 56260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li>The {@link Events} table holds the event specific information. Each row 57260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * in this table has the info for a single event. It contains information such 58260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * as event title, location, start time, end time, etc. The event can occur 59260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * one-time or can recur multiple times. Attendees, reminders, and extended 60260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * properties are stored on separate tables and reference the {@link Events#_ID} 61260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * to link them with the event.</li> 62260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li>The {@link Instances} table holds the start and end time for occurrences 63260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * of an event. Each row in this table represents a single occurrence. For 64260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * one-time events there will be a 1:1 mapping of instances to events. For 65260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * recurring events, multiple rows will automatically be generated which 66260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * correspond to multiple occurrences of that event.</li> 67260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li>The {@link Attendees} table holds the event attendee or guest 68260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * information. Each row represents a single guest of an event. It specifies the 69260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * type of guest they are and their attendance response for the event.</li> 70260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li>The {@link Reminders} table holds the alert/notification data. Each row 71260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * represents a single alert for an event. An event can have multiple reminders. 72260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * The number of reminders per event is specified in 73260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * {@link Calendars#MAX_REMINDERS} which is set by the Sync Adapter that owns 74260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * the given calendar. Reminders are specified in minutes before the event and 75260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * have a type.</li> 7673bddfcdd3ba50d30aca9df0f394d15bc7932b6aMichael Chan * <li>The {@link ExtendedProperties} table holds opaque data fields used by the 77260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * sync adapter. The provider takes no action with items in this table except to 78260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * delete them when their related events are deleted.</li> 79260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * </ul> 80260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <p> 81260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * Other tables include: 82260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * </p> 83260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <ul> 84260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li> 85260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * {@link SyncState}, which contains free-form data maintained by the sync 86260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * adapters</li> 87260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * </ul> 88bec6c36b96f7bc415af18abbb142bd51a1741796RoboErik * 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 90bec6c36b96f7bc415af18abbb142bd51a1741796RoboErikpublic final class CalendarContract { 91c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String TAG = "Calendar"; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 94c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Broadcast Action: This is the intent that gets fired when an alarm 95c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * notification needs to be posted for a reminder. 96083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 983672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 99e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik public static final String ACTION_EVENT_REMINDER = "android.intent.action.EVENT_REMINDER"; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10237960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * Activity Action: Display the event to the user in the custom app as 10337960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * specified in {@link EventsColumns#CUSTOM_APP_PACKAGE}. The custom app 10437960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * will be started via {@link Activity#startActivityForResult(Intent, int)} 10537960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * and it should call {@link Activity#setResult(int)} with 10637960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * {@link Activity#RESULT_OK} or {@link Activity#RESULT_CANCELED} to 10737960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * acknowledge whether the action was handled or not. 1089a9001f008d68d11ba6cd928d20ed63ec5e869d1Michael Chan * 109e4ce502d77899d273fda6ab79568f112d7d66f0akmccormick * The custom app should have an intent filter like the following: 1109a9001f008d68d11ba6cd928d20ed63ec5e869d1Michael Chan * <pre> 111e4ce502d77899d273fda6ab79568f112d7d66f0akmccormick * <intent-filter> 112e4ce502d77899d273fda6ab79568f112d7d66f0akmccormick * <action android:name="android.provider.calendar.action.HANDLE_CUSTOM_EVENT" /> 113e4ce502d77899d273fda6ab79568f112d7d66f0akmccormick * <category android:name="android.intent.category.DEFAULT" /> 114e4ce502d77899d273fda6ab79568f112d7d66f0akmccormick * <data android:mimeType="vnd.android.cursor.item/event" /> 115e4ce502d77899d273fda6ab79568f112d7d66f0akmccormick * </intent-filter></pre> 11637960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * <p> 11737960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * Input: {@link Intent#getData} has the event URI. The extra 11837960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * {@link #EXTRA_EVENT_BEGIN_TIME} has the start time of the instance. The 11937960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * extra {@link #EXTRA_CUSTOM_APP_URI} will have the 12037960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * {@link EventsColumns#CUSTOM_APP_URI}. 12137960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * <p> 12237960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * Output: {@link Activity#RESULT_OK} if this was handled; otherwise 123e4ce502d77899d273fda6ab79568f112d7d66f0akmccormick * {@link Activity#RESULT_CANCELED}. 12437960c7f58197404d2331a0ea81194ffc98552c1Michael Chan */ 12537960c7f58197404d2331a0ea81194ffc98552c1Michael Chan @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 12637960c7f58197404d2331a0ea81194ffc98552c1Michael Chan public static final String ACTION_HANDLE_CUSTOM_EVENT = 12737960c7f58197404d2331a0ea81194ffc98552c1Michael Chan "android.provider.calendar.action.HANDLE_CUSTOM_EVENT"; 12837960c7f58197404d2331a0ea81194ffc98552c1Michael Chan 12937960c7f58197404d2331a0ea81194ffc98552c1Michael Chan /** 13037960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * Intent Extras key: {@link EventsColumns#CUSTOM_APP_URI} for the event in 13137960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * the {@link #ACTION_HANDLE_CUSTOM_EVENT} intent 13237960c7f58197404d2331a0ea81194ffc98552c1Michael Chan */ 133f0c4c658488824707c206551fd1ccc0a0781031eMichael Chan public static final String EXTRA_CUSTOM_APP_URI = "customAppUri"; 13437960c7f58197404d2331a0ea81194ffc98552c1Michael Chan 13537960c7f58197404d2331a0ea81194ffc98552c1Michael Chan /** 136c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Intent Extras key: The start time of an event or an instance of a 137c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * recurring event. (milliseconds since epoch) 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 139e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik public static final String EXTRA_EVENT_BEGIN_TIME = "beginTime"; 140c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik 141c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 142c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Intent Extras key: The end time of an event or an instance of a recurring 143c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * event. (milliseconds since epoch) 144c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 145e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik public static final String EXTRA_EVENT_END_TIME = "endTime"; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 147e9b734dff148d8e70a9604c81d162144becdc45dErik /** 1487420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan * Intent Extras key: When creating an event, set this to true to create an 1497420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan * all-day event by default 1507420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan */ 1517420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan public static final String EXTRA_EVENT_ALL_DAY = "allDay"; 1527420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan 1537420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan /** 154c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * This authority is used for writing to or querying from the calendar 155c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * provider. Note: This is set at first run and cannot be changed without 156c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * breaking apps that access the provider. 157e9b734dff148d8e70a9604c81d162144becdc45dErik */ 1581790c13ed68a3fc1f8d91d636caae422a19b1a2aKen Shirriff public static final String AUTHORITY = "com.android.calendar"; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URL for the top-level calendar authority 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 163083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1665b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff * An optional insert, update or delete URI parameter that allows the caller 167c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * to specify that it is a sync adapter. The default value is false. If set 168c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * to true, the modified row is not marked as "dirty" (needs to be synced) 169c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * and when the provider calls 170c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * {@link ContentResolver#notifyChange(android.net.Uri, android.database.ContentObserver, boolean)} 171c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * , the third parameter "syncToNetwork" is set to false. Furthermore, if 172c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * set to true, the caller must also include 1736f5b4550450d98bb2ae4ac93cefd4133e2a71847Andy McFadden * {@link Calendars#ACCOUNT_NAME} and {@link Calendars#ACCOUNT_TYPE} as 174c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * query parameters. 175c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1766f5b4550450d98bb2ae4ac93cefd4133e2a71847Andy McFadden * @see Uri.Builder#appendQueryParameter(java.lang.String, java.lang.String) 1775b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff */ 1785b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff public static final String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter"; 1795b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 180c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 181c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * A special account type for calendars not associated with any account. 182c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Normally calendars that do not match an account on the device will be 183c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * removed. Setting the account_type on a calendar to this will prevent it 184c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * from being wiped if it does not match an existing account. 185c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 186c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @see SyncColumns#ACCOUNT_TYPE 187c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 188c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik public static final String ACCOUNT_TYPE_LOCAL = "LOCAL"; 189c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 1905b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff /** 1913672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 1923672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 1933672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private CalendarContract() {} 1943672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 1953672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 196c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Generic columns for use by sync adapters. The specific functions of these 197c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * columns are private to the sync adapter. Other clients of the API should 198c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * not attempt to either read or write this column. These columns are 199c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * editable as part of the Calendars Uri, but can only be read if accessed 200c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * through any other Uri. 20136f7784a4cb45845ed7725c0cc6d7022682f00b3Fabrice Di Meglio */ 202c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik protected interface CalendarSyncColumns { 20336f7784a4cb45845ed7725c0cc6d7022682f00b3Fabrice Di Meglio 2049734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2059734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2069734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2079734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2089734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 209be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC1 = "cal_sync1"; 2109734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2119734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2129734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2139734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2149734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 215be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC2 = "cal_sync2"; 2169734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2179734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2189734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2199734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2209734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 221be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC3 = "cal_sync3"; 2229734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2239734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2249734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2259734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2269734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 227be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC4 = "cal_sync4"; 2289734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2299734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2309734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2319734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2329734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 233be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC5 = "cal_sync5"; 2349734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2359734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2369734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2379734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2389734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 239be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC6 = "cal_sync6"; 2409734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2419734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2429734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2439734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2449734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 2459734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAL_SYNC7 = "cal_sync7"; 2469734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2479734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2489734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2499734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2509734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 2519734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAL_SYNC8 = "cal_sync8"; 2529734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2539734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2549734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2559734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2569734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 2579734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAL_SYNC9 = "cal_sync9"; 2589734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2599734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2609734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2619734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2629734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 2639734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAL_SYNC10 = "cal_sync10"; 26436f7784a4cb45845ed7725c0cc6d7022682f00b3Fabrice Di Meglio } 26536f7784a4cb45845ed7725c0cc6d7022682f00b3Fabrice Di Meglio 26636f7784a4cb45845ed7725c0cc6d7022682f00b3Fabrice Di Meglio /** 267c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Columns for Sync information used by Calendars and Events tables. These 268c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * have specific uses which are expected to be consistent by the app and 269c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * sync adapter. 270c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2720025860b61c1b9e8e7d1da7edd7a8ad837b87078RoboErik protected interface SyncColumns extends CalendarSyncColumns { 273328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 274c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The account that was used to sync the entry to the device. If the 275c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * account_type is not {@link #ACCOUNT_TYPE_LOCAL} then the name and 276c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * type must match an account on the device or the calendar will be 277c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * deleted. 278328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana * <P>Type: TEXT</P> 279328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 280651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String ACCOUNT_NAME = "account_name"; 281328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 282328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 283c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The type of the account that was used to sync the entry to the 284c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * device. A type of {@link #ACCOUNT_TYPE_LOCAL} will keep this event 285c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * form being deleted if there are no matching accounts on the device. 286328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana * <P>Type: TEXT</P> 287328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 288651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String ACCOUNT_TYPE = "account_type"; 289328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 290328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 291c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The unique ID for a row assigned by the sync source. NULL if the row 292c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * has never been synced. This is used as a reference id for exceptions 293c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * along with {@link BaseColumns#_ID}. 294328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana * <P>Type: TEXT</P> 295328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 296328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public static final String _SYNC_ID = "_sync_id"; 297328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 298328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 2999734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Used to indicate that local, unsynced, changes are present. 300328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana * <P>Type: INTEGER (long)</P> 301328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 3028ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert 3039734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String DIRTY = "dirty"; 304328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 305328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 3068ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert * Used in conjunction with {@link #DIRTY} to indicate what packages wrote local changes. 3078ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert * <P>Type: TEXT</P> 3088ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert */ 3098ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert public static final String MUTATORS = "mutators"; 3108ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert 3118ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert /** 3129734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Whether the row has been deleted but not synced to the server. A 3139734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * deleted row should be ignored. 3149734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P> 3159734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Type: INTEGER (boolean) 3169734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * </P> 317328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 3189734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String DELETED = "deleted"; 31915049e46f7331b64bd3093e1d9a0365ca5caf3aeKen Shirriff 320866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert /** 321866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * If set to 1 this causes events on this calendar to be duplicated with 3220025860b61c1b9e8e7d1da7edd7a8ad837b87078RoboErik * {@link Events#LAST_SYNCED} set to 1 whenever the event 3239734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * transitions from non-dirty to dirty. The duplicated event will not be 3249734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * expanded in the instances table and will only show up in sync adapter 3259734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * queries of the events table. It will also be deleted when the 326866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * originating event has its dirty flag cleared by the sync adapter. 327866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * <P>Type: INTEGER (boolean)</P> 328866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert */ 329866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert public static final String CAN_PARTIALLY_UPDATE = "canPartiallyUpdate"; 330c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 331c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 332c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 333c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Columns specific to the Calendars Uri that other Uris can query. 334c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 335e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik protected interface CalendarColumns { 336c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 3374f52061b51325d8de189eb2cb1c1272b2740b8f8RoboErik * The color of the calendar. This should only be updated by the sync 3384f52061b51325d8de189eb2cb1c1272b2740b8f8RoboErik * adapter, not other apps, as changing a calendar's color can adversely 3394f52061b51325d8de189eb2cb1c1272b2740b8f8RoboErik * affect its display. 340c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <P>Type: INTEGER (color value)</P> 341c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 342651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String CALENDAR_COLOR = "calendar_color"; 343c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 344c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 3454172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * A key for looking up a color from the {@link Colors} table. NULL or 3464172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * an empty string are reserved for indicating that the calendar does 3474172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * not use a key for looking up the color. The provider will update 3484172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * {@link #CALENDAR_COLOR} automatically when a valid key is written to 3494172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * this column. The key must reference an existing row of the 3508a8eebcbe8e3aded682c9c4937e155218ddf7ff4RoboErik * {@link Colors} table. @see Colors 351f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * <P> 352f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * Type: TEXT 353f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * </P> 354f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 3554172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik public static final String CALENDAR_COLOR_KEY = "calendar_color_index"; 356f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 357f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 3589734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * The display name of the calendar. Column name. 359f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * <P> 360f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * Type: TEXT 361f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * </P> 3629734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 3639734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CALENDAR_DISPLAY_NAME = "calendar_displayName"; 3649734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 3659734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 366c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * The level of access that the user has for the calendar 367c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <P>Type: INTEGER (one of the values below)</P> 368c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 3699734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CALENDAR_ACCESS_LEVEL = "calendar_access_level"; 370c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 371c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** Cannot access the calendar */ 3729734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_NONE = 0; 373c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** Can only see free/busy information about the calendar */ 3749734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_FREEBUSY = 100; 375c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** Can read all event details */ 3769734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_READ = 200; 377c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** Can reply yes/no/maybe to an event */ 3789734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_RESPOND = 300; 379c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** not used */ 3809734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_OVERRIDE = 400; 381c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** Full access to modify the calendar, but not the access control 382c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * settings 383c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 3849734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_CONTRIBUTOR = 500; 385c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** Full access to modify the calendar, but not the access control 386c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * settings 387c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 3889734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_EDITOR = 600; 389c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** Full access to the calendar */ 3909734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_OWNER = 700; 391c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** Domain admin */ 3929734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_ROOT = 800; 393c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 394c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 395c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * Is the calendar selected to be displayed? 396c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 0 - do not show events associated with this calendar. 397c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1 - show events associated with this calendar 398c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <P>Type: INTEGER (boolean)</P> 399c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 400df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden public static final String VISIBLE = "visible"; 401c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 402c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 403c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The time zone the calendar is associated with. 404c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <P>Type: TEXT</P> 405c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 4069734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CALENDAR_TIME_ZONE = "calendar_timezone"; 407c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 408c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 409c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Is this calendar synced and are its events stored on the device? 410c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 0 - Do not sync this calendar or store events for this calendar. 411c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1 - Sync down events for this calendar. 412c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <p>Type: INTEGER (boolean)</p> 413c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 414c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio public static final String SYNC_EVENTS = "sync_events"; 415c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 416c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 4179734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * The owner account for this calendar, based on the calendar feed. 4189734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This will be different from the _SYNC_ACCOUNT for delegated calendars. 4199734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Column name. 4209734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: String</P> 421c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 4229734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String OWNER_ACCOUNT = "ownerAccount"; 423c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 424c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 4259734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Can the organizer respond to the event? If no, the status of the 4269734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * organizer should not be shown by the UI. Defaults to 1. Column name. 427c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <P>Type: INTEGER (boolean)</P> 428c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 4299734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAN_ORGANIZER_RESPOND = "canOrganizerRespond"; 4309734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 4319734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 4329734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Can the organizer modify the time zone of the event? Column name. 4339734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: INTEGER (boolean)</P> 4349734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 4359734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAN_MODIFY_TIME_ZONE = "canModifyTimeZone"; 4369734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 4379734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 4389734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * The maximum number of reminders allowed for an event. Column name. 4399734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: INTEGER</P> 4409734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 4419734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String MAX_REMINDERS = "maxReminders"; 4429734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 4439734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 4449734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * A comma separated list of reminder methods supported for this 4459734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * calendar in the format "#,#,#". Valid types are 4469734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * {@link Reminders#METHOD_DEFAULT}, {@link Reminders#METHOD_ALERT}, 447bd2516165e4d38f1ee7f7f0ceb038ebf7ea1b84aAlon Albert * {@link Reminders#METHOD_EMAIL}, {@link Reminders#METHOD_SMS}, 448bd2516165e4d38f1ee7f7f0ceb038ebf7ea1b84aAlon Albert * {@link Reminders#METHOD_ALARM}. Column name. 4499734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 4509734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 4519734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String ALLOWED_REMINDERS = "allowedReminders"; 452f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 453f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 454f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * A comma separated list of availability types supported for this 455f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * calendar in the format "#,#,#". Valid types are 456f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * {@link Events#AVAILABILITY_BUSY}, {@link Events#AVAILABILITY_FREE}, 457f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * {@link Events#AVAILABILITY_TENTATIVE}. Setting this field to only 458f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * {@link Events#AVAILABILITY_BUSY} should be used to indicate that 459f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * changing the availability is not supported. 460f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * 461f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 462f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik public static final String ALLOWED_AVAILABILITY = "allowedAvailability"; 463f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 464f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 465f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * A comma separated list of attendee types supported for this calendar 466f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * in the format "#,#,#". Valid types are {@link Attendees#TYPE_NONE}, 467f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * {@link Attendees#TYPE_OPTIONAL}, {@link Attendees#TYPE_REQUIRED}, 468f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * {@link Attendees#TYPE_RESOURCE}. Setting this field to only 469f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * {@link Attendees#TYPE_NONE} should be used to indicate that changing 470f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * the attendee type is not supported. 471f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * 472f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 473f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik public static final String ALLOWED_ATTENDEE_TYPES = "allowedAttendeeTypes"; 4740a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert 4750a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert /** 4760a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert * Is this the primary calendar for this account. If this column is not explicitly set, the 4770a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert * provider will return 1 if {@link Calendars#ACCOUNT_NAME} is equal to 4780a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert * {@link Calendars#OWNER_ACCOUNT}. 4790a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert */ 4800a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert public static final String IS_PRIMARY = "isPrimary"; 481c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 482c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 483c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 484c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * Class that represents a Calendar Entity. There is one entry per calendar. 485c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * This is a helper class to make batch operations easier. 486c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 4873672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik public static final class CalendarEntity implements BaseColumns, SyncColumns, CalendarColumns { 488c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 489c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 490c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The default Uri used when creating a new calendar EntityIterator. 491c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 492c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 493c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + 494c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio "/calendar_entities"); 495c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 496c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 4973672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 4983672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 4993672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private CalendarEntity() {} 5003672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 5013672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 502c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Creates an entity iterator for the given cursor. It assumes the 503c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * cursor contains a calendars query. 504c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 505c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cursor query on {@link #CONTENT_URI} 506c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return an EntityIterator of calendars 507c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 508c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik public static EntityIterator newEntityIterator(Cursor cursor) { 509c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik return new EntityIteratorImpl(cursor); 510c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 511c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 512c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio private static class EntityIteratorImpl extends CursorEntityIterator { 513c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 514c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik public EntityIteratorImpl(Cursor cursor) { 515c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio super(cursor); 516c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 517c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 518c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio @Override 519c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio public Entity getEntityAndIncrementCursor(Cursor cursor) throws RemoteException { 520c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio // we expect the cursor is already at the row we need to read from 521c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio final long calendarId = cursor.getLong(cursor.getColumnIndexOrThrow(_ID)); 522c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 523c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio // Create the content value 524c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio ContentValues cv = new ContentValues(); 525c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio cv.put(_ID, calendarId); 526c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 527651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ACCOUNT_NAME); 528651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ACCOUNT_TYPE); 529c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 530c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, _SYNC_ID); 531651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DIRTY); 5328ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, MUTATORS); 533c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 5349734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC1); 5359734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC2); 5369734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC3); 5379734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC4); 5389734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC5); 5399734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC6); 5409734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC7); 5419734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC8); 5429734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC9); 5439734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC10); 544c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 545c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.NAME); 546c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, 5479734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik Calendars.CALENDAR_DISPLAY_NAME); 548866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 549866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert Calendars.CALENDAR_COLOR); 5500114112203ec55e10c209fded7495a6b70a3e468Alon Albert DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, 5510114112203ec55e10c209fded7495a6b70a3e468Alon Albert Calendars.CALENDAR_COLOR_KEY); 5529734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, CALENDAR_ACCESS_LEVEL); 553df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, VISIBLE); 554c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, SYNC_EVENTS); 555651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, 556651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik Calendars.CALENDAR_LOCATION); 5579734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CALENDAR_TIME_ZONE); 558c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, 559c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio Calendars.OWNER_ACCOUNT); 560c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 561df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden Calendars.CAN_ORGANIZER_RESPOND); 562df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 563df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden Calendars.CAN_MODIFY_TIME_ZONE); 564df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 565df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden Calendars.MAX_REMINDERS); 566866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 567866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert Calendars.CAN_PARTIALLY_UPDATE); 5689734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, 5699734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik Calendars.ALLOWED_REMINDERS); 570c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 571c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, DELETED); 572c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 573c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio // Create the Entity from the ContentValue 574c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio Entity entity = new Entity(cv); 575c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 576c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio // Set cursor to next row 577c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio cursor.moveToNext(); 578c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 579c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio // Return the created Entity 580c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio return entity; 581c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 582c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 583c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 584c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 585c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 586f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * Constants and helpers for the Calendars table, which contains details for 587f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * individual calendars. <h3>Operations</h3> All operations can be done 588f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * either as an app or as a sync adapter. To perform an operation as a sync 589f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * adapter {@link #CALLER_IS_SYNCADAPTER} should be set to true and 590f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link #ACCOUNT_NAME} and {@link #ACCOUNT_TYPE} must be set in the Uri 591f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * parameters. See 592f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link Uri.Builder#appendQueryParameter(java.lang.String, java.lang.String)} 593f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * for details on adding parameters. Sync adapters have write access to more 594f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * columns but are restricted to a single account at a time. Calendars are 595f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * designed to be primarily managed by a sync adapter and inserting new 596f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * calendars should be done as a sync adapter. For the most part, apps 597f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * should only update calendars (such as changing the color or display 598f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * name). If a local calendar is required an app can do so by inserting as a 599f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * sync adapter and using an {@link #ACCOUNT_TYPE} of 600f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link #ACCOUNT_TYPE_LOCAL} . 601f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dl> 602f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dt><b>Insert</b></dt> 603f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dd>When inserting a new calendar the following fields must be included: 604f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <ul> 605f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ACCOUNT_NAME}</li> 606f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ACCOUNT_TYPE}</li> 607f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #NAME}</li> 608f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_DISPLAY_NAME}</li> 609f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_COLOR}</li> 610f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_ACCESS_LEVEL}</li> 611f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #OWNER_ACCOUNT}</li> 612f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * </ul> 613f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * The following fields are not required when inserting a Calendar but are 614f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * generally a good idea to include: 615f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <ul> 616f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #SYNC_EVENTS} set to 1</li> 617f92ccfb8b0e2062e5170ea649cdc01692b09a683RoboErik * <li>{@link #CALENDAR_TIME_ZONE}</li> 618f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ALLOWED_REMINDERS}</li> 6194172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * <li>{@link #ALLOWED_AVAILABILITY}</li> 6204172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * <li>{@link #ALLOWED_ATTENDEE_TYPES}</li> 621f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * </ul> 622f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dt><b>Update</b></dt> 623f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dd>To perform an update on a calendar the {@link #_ID} of the calendar 624f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * should be provided either as an appended id to the Uri ( 625f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link ContentUris#withAppendedId}) or as the first selection item--the 626f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * selection should start with "_id=?" and the first selectionArg should be 627f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * the _id of the calendar. Calendars may also be updated using a selection 628f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * without the id. In general, the {@link #ACCOUNT_NAME} and 629f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link #ACCOUNT_TYPE} should not be changed after a calendar is created 630f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * as this can cause issues for sync adapters. 631f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dt><b>Delete</b></dt> 632f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dd>Calendars can be deleted either by the {@link #_ID} as an appended id 633f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * on the Uri or using any standard selection. Deleting a calendar should 634f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * generally be handled by a sync adapter as it will remove the calendar 635f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * from the database and all associated data (aka events).</dd> 636f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dt><b>Query</b></dt> 637f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dd>Querying the Calendars table will get you all information about a set 638f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * of calendars. There will be one row returned for each calendar that 639f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * matches the query selection, or at most a single row if the {@link #_ID} 640f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * is appended to the Uri.</dd> 641f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * </dl> 642f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <h3>Calendar Columns</h3> The following Calendar columns are writable by 643f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * both an app and a sync adapter. 644f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <ul> 645f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #NAME}</li> 646f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_DISPLAY_NAME}</li> 647f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #VISIBLE}</li> 648f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #SYNC_EVENTS}</li> 649f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * </ul> 650f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * The following Calendars columns are writable only by a sync adapter 651f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <ul> 652f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ACCOUNT_NAME}</li> 653f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ACCOUNT_TYPE}</li> 6544f52061b51325d8de189eb2cb1c1272b2740b8f8RoboErik * <li>{@link #CALENDAR_COLOR}</li> 655f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #_SYNC_ID}</li> 656f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #DIRTY}</li> 6578ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert * <li>{@link #MUTATORS}</li> 658f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #OWNER_ACCOUNT}</li> 659f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #MAX_REMINDERS}</li> 660f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ALLOWED_REMINDERS}</li> 6614172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * <li>{@link #ALLOWED_AVAILABILITY}</li> 6624172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * <li>{@link #ALLOWED_ATTENDEE_TYPES}</li> 663f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAN_MODIFY_TIME_ZONE}</li> 664f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAN_ORGANIZER_RESPOND}</li> 665f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAN_PARTIALLY_UPDATE}</li> 666f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_LOCATION}</li> 667f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_TIME_ZONE}</li> 668f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_ACCESS_LEVEL}</li> 669f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #DELETED}</li> 670f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC1}</li> 671f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC2}</li> 672f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC3}</li> 673f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC4}</li> 674f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC5}</li> 675f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC6}</li> 676f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC7}</li> 677f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC8}</li> 678f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC9}</li> 679f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC10}</li> 680f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * </ul> 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6823672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik public static final class Calendars implements BaseColumns, SyncColumns, CalendarColumns { 6833672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 6843672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 6853672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 6863672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 6873672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private Calendars() {} 6883672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 690c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for accessing Calendars 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 692c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 6931dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/calendars"); 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 698e5e0250dd23d0ff718a26350f3076884235b8c0eMichael Chan public static final String DEFAULT_SORT_ORDER = CALENDAR_DISPLAY_NAME; 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 701c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The name of the calendar. Column name. 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NAME = "name"; 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 707c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The default location for the calendar. Column name. 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 710651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String CALENDAR_LOCATION = "calendar_location"; 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7136efb30f40a19a9639076b08df4f64d335c8946a0RoboErik * These fields are only writable by a sync adapter. To modify them the 714c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * caller must include {@link #CALLER_IS_SYNCADAPTER}, 7159734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * {@link #ACCOUNT_NAME}, and {@link #ACCOUNT_TYPE} in the Uri's query 716083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * parameters. TODO move to provider 717083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * 718083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 7196efb30f40a19a9639076b08df4f64d335c8946a0RoboErik */ 7206efb30f40a19a9639076b08df4f64d335c8946a0RoboErik public static final String[] SYNC_WRITABLE_COLUMNS = new String[] { 721651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik ACCOUNT_NAME, 722651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik ACCOUNT_TYPE, 7236efb30f40a19a9639076b08df4f64d335c8946a0RoboErik _SYNC_ID, 724651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DIRTY, 7258ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert MUTATORS, 7266efb30f40a19a9639076b08df4f64d335c8946a0RoboErik OWNER_ACCOUNT, 7276efb30f40a19a9639076b08df4f64d335c8946a0RoboErik MAX_REMINDERS, 728f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik ALLOWED_REMINDERS, 7296efb30f40a19a9639076b08df4f64d335c8946a0RoboErik CAN_MODIFY_TIME_ZONE, 7306efb30f40a19a9639076b08df4f64d335c8946a0RoboErik CAN_ORGANIZER_RESPOND, 731866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert CAN_PARTIALLY_UPDATE, 732651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik CALENDAR_LOCATION, 7339734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_TIME_ZONE, 7349734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_ACCESS_LEVEL, 7356efb30f40a19a9639076b08df4f64d335c8946a0RoboErik DELETED, 736be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik CAL_SYNC1, 737be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik CAL_SYNC2, 738be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik CAL_SYNC3, 739be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik CAL_SYNC4, 740c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC5, 741c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC6, 7429734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC7, 7439734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC8, 7449734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC9, 7459734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC10, 7466efb30f40a19a9639076b08df4f64d335c8946a0RoboErik }; 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 750c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * Columns from the Attendees table that other tables join into themselves. 751c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 752b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface AttendeesColumns { 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 755c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The id of the event. Column name. 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_ID = "event_id"; 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 761c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The name of the attendee. Column name. 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: STRING</P> 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ATTENDEE_NAME = "attendeeName"; 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 767c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The email address of the attendee. Column name. 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: STRING</P> 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ATTENDEE_EMAIL = "attendeeEmail"; 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 773c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The relationship of the attendee to the user. Column name. 774c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER (one of {@link #RELATIONSHIP_ATTENDEE}, ...}.</P> 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ATTENDEE_RELATIONSHIP = "attendeeRelationship"; 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RELATIONSHIP_NONE = 0; 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RELATIONSHIP_ATTENDEE = 1; 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RELATIONSHIP_ORGANIZER = 2; 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RELATIONSHIP_PERFORMER = 3; 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RELATIONSHIP_SPEAKER = 4; 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 785c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The type of attendee. Column name. 786f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * <P> 7874172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * Type: Integer (one of {@link #TYPE_NONE}, {@link #TYPE_REQUIRED}, 7884172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * {@link #TYPE_OPTIONAL}, {@link #TYPE_RESOURCE}) 789f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * </P> 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ATTENDEE_TYPE = "attendeeType"; 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_NONE = 0; 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_REQUIRED = 1; 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_OPTIONAL = 2; 796f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 7974172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * This specifies that an attendee is a resource, like a room, a 7984172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * cabbage, or something and not an actual person. 799f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 800f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik public static final int TYPE_RESOURCE = 3; 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 803c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The attendance status of the attendee. Column name. 804c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: Integer (one of {@link #ATTENDEE_STATUS_ACCEPTED}, ...).</P> 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ATTENDEE_STATUS = "attendeeStatus"; 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ATTENDEE_STATUS_NONE = 0; 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ATTENDEE_STATUS_ACCEPTED = 1; 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ATTENDEE_STATUS_DECLINED = 2; 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ATTENDEE_STATUS_INVITED = 3; 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ATTENDEE_STATUS_TENTATIVE = 4; 81348ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan 81448ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan /** 81548ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan * The identity of the attendee as referenced in 81648ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan * {@link ContactsContract.CommonDataKinds.Identity#IDENTITY}. 81737f1d29784ecedf8c1f1ac128c72ef3bfb5c7066Michael Chan * This is required only if {@link #ATTENDEE_ID_NAMESPACE} is present. Column name. 81848ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan * <P>Type: STRING</P> 81948ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan */ 82048ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan public static final String ATTENDEE_IDENTITY = "attendeeIdentity"; 82148ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan 82248ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan /** 82348ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan * The identity name space of the attendee as referenced in 82448ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan * {@link ContactsContract.CommonDataKinds.Identity#NAMESPACE}. 82537f1d29784ecedf8c1f1ac128c72ef3bfb5c7066Michael Chan * This is required only if {@link #ATTENDEE_IDENTITY} is present. Column name. 82648ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan * <P>Type: STRING</P> 82748ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan */ 82848ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan public static final String ATTENDEE_ID_NAMESPACE = "attendeeIdNamespace"; 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 831c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 8323771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * Fields and helpers for interacting with Attendees. Each row of this table 8333771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * represents a single attendee or guest of an event. Calling 83458644028f909ecb429b26f909bedfb62a153d4e4RoboErik * {@link #query(ContentResolver, long, String[])} will return a list of attendees for 8353771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * the event with the given eventId. Both apps and sync adapters may write 8363771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * to this table. There are six writable fields and all of them except 8373771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * {@link #ATTENDEE_NAME} must be included when inserting a new attendee. 8383771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * They are: 8393771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <ul> 8403771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #EVENT_ID}</li> 8413771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #ATTENDEE_NAME}</li> 8423771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #ATTENDEE_EMAIL}</li> 8433771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #ATTENDEE_RELATIONSHIP}</li> 8443771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #ATTENDEE_TYPE}</li> 8453771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #ATTENDEE_STATUS}</li> 84648ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan * <li>{@link #ATTENDEE_IDENTITY}</li> 84748ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan * <li>{@link #ATTENDEE_ID_NAMESPACE}</li> 8483771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * </ul> 849c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 8501dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio public static final class Attendees implements BaseColumns, AttendeesColumns, EventsColumns { 851c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik 852c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 853c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for accessing Attendees data 854c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 855c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 8561dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/attendees"); 857c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String ATTENDEES_WHERE = Attendees.EVENT_ID + "=?"; 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 8603672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 8613672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 8623672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private Attendees() {} 8633672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 8643672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 865c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Queries all attendees associated with the given event. This is a 866c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * blocking call and should not be done on the UI thread. 8673672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * 868c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cr The content resolver to use for the query 869c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param eventId The id of the event to retrieve attendees for 87058644028f909ecb429b26f909bedfb62a153d4e4RoboErik * @param projection the columns to return in the cursor 871c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return A Cursor containing all attendees for the event 872c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 87358644028f909ecb429b26f909bedfb62a153d4e4RoboErik public static final Cursor query(ContentResolver cr, long eventId, String[] projection) { 874c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik String[] attArgs = {Long.toString(eventId)}; 87558644028f909ecb429b26f909bedfb62a153d4e4RoboErik return cr.query(CONTENT_URI, projection, ATTENDEES_WHERE, attArgs /* selection args */, 876c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik null /* sort order */); 877c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik } 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Columns from the Events table that other tables join into themselves. 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 883b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface EventsColumns { 884df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden 885df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden /** 886c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The {@link Calendars#_ID} of the calendar the event belongs to. 887c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Column name. 888c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER</P> 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CALENDAR_ID = "calendar_id"; 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 893c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The title of the event. Column name. 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String TITLE = "title"; 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 899c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The description of the event. Column name. 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DESCRIPTION = "description"; 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 905c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Where the event takes place. Column name. 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_LOCATION = "eventLocation"; 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 911f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * A secondary color for the individual event. This should only be 912f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * updated by the sync adapter for a given account. 9139734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: INTEGER</P> 9149734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 9159734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String EVENT_COLOR = "eventColor"; 9169734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 9179734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 9184172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * A secondary color key for the individual event. NULL or an empty 9194172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * string are reserved for indicating that the event does not use a key 9204172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * for looking up the color. The provider will update 9214172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * {@link #EVENT_COLOR} automatically when a valid key is written to 9224172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * this column. The key must reference an existing row of the 9238a8eebcbe8e3aded682c9c4937e155218ddf7ff4RoboErik * {@link Colors} table. @see Colors 9248a8eebcbe8e3aded682c9c4937e155218ddf7ff4RoboErik * <P> 9258a8eebcbe8e3aded682c9c4937e155218ddf7ff4RoboErik * Type: TEXT 9268a8eebcbe8e3aded682c9c4937e155218ddf7ff4RoboErik * </P> 927f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 9284172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik public static final String EVENT_COLOR_KEY = "eventColor_index"; 929f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 930f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 931dc927307ec69dcda57a05b51bcab78cb994f350bAlon Albert * This will be {@link #EVENT_COLOR} if it is not null; otherwise, this will be 932dc927307ec69dcda57a05b51bcab78cb994f350bAlon Albert * {@link Calendars#CALENDAR_COLOR}. 933dc927307ec69dcda57a05b51bcab78cb994f350bAlon Albert * Read-only value. To modify, write to {@link #EVENT_COLOR} or 934dc927307ec69dcda57a05b51bcab78cb994f350bAlon Albert * {@link Calendars#CALENDAR_COLOR} directly. 935dc927307ec69dcda57a05b51bcab78cb994f350bAlon Albert *<P> 936dc927307ec69dcda57a05b51bcab78cb994f350bAlon Albert * Type: INTEGER 937dc927307ec69dcda57a05b51bcab78cb994f350bAlon Albert *</P> 938dc927307ec69dcda57a05b51bcab78cb994f350bAlon Albert */ 939dc927307ec69dcda57a05b51bcab78cb994f350bAlon Albert public static final String DISPLAY_COLOR = "displayColor"; 940dc927307ec69dcda57a05b51bcab78cb994f350bAlon Albert 941dc927307ec69dcda57a05b51bcab78cb994f350bAlon Albert /** 942c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The event status. Column name. 943c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER (one of {@link #STATUS_TENTATIVE}...)</P> 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String STATUS = "eventStatus"; 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATUS_TENTATIVE = 0; 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATUS_CONFIRMED = 1; 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATUS_CANCELED = 2; 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a copy of the attendee status for the owner of this event. 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This field is copied here so that we can efficiently filter out 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events that are declined without having to look in the Attendees 955c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * table. Column name. 9565b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff * 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String SELF_ATTENDEE_STATUS = "selfAttendeeStatus"; 9605b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 962c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * This column is available for use by sync adapters. Column name. 96364a556d755d27b1182897e9243cf4f3016e76a88Marc Blank * <P>Type: TEXT</P> 96464a556d755d27b1182897e9243cf4f3016e76a88Marc Blank */ 965651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String SYNC_DATA1 = "sync_data1"; 96664a556d755d27b1182897e9243cf4f3016e76a88Marc Blank 96764a556d755d27b1182897e9243cf4f3016e76a88Marc Blank /** 9689734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 9699734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 9709734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 9719734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA2 = "sync_data2"; 9729734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 9739734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 9749734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 9759734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 9769734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 9779734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA3 = "sync_data3"; 9789734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 9799734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 9809734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 9819734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 9829734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 9839734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA4 = "sync_data4"; 9849734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 9859734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 9869734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 9879734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 9889734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 9899734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA5 = "sync_data5"; 9909734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 9919734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 9929734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 9939734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 9949734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 9959734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA6 = "sync_data6"; 9969734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 9979734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 9989734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 999866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * <P>Type: TEXT</P> 1000866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert */ 1001866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert public static final String SYNC_DATA7 = "sync_data7"; 1002866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert 1003866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert /** 10049734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 10059734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 10069734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 10079734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA8 = "sync_data8"; 10089734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 10099734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 10109734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 10119734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 10129734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 10139734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA9 = "sync_data9"; 10149734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 10159734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 10169734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 10179734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 10189734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 10199734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA10 = "sync_data10"; 10209734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 10219734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 1022866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * Used to indicate that a row is not a real event but an original copy of a locally 1023866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * modified event. A copy is made when an event changes from non-dirty to dirty and the 1024866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * event is on a calendar with {@link Calendars#CAN_PARTIALLY_UPDATE} set to 1. This copy 1025866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * does not get expanded in the instances table and is only visible in queries made by a 1026866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * sync adapter. The copy gets removed when the event is changed back to non-dirty by a 1027866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * sync adapter. 1028866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * <P>Type: INTEGER (boolean)</P> 1029866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert */ 1030866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert public static final String LAST_SYNCED = "lastSynced"; 1031866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert 1032866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert /** 1033c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The time the event starts in UTC millis since epoch. Column name. 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DTSTART = "dtstart"; 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1039c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The time the event ends in UTC millis since epoch. Column name. 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DTEND = "dtend"; 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1045c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The duration of the event in RFC2445 format. Column name. 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT (duration in RFC2445 format)</P> 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DURATION = "duration"; 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1051c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The timezone for the event. Column name. 1052c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: TEXT</P> 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_TIMEZONE = "eventTimezone"; 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1057c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The timezone for the end time of the event. Column name. 1058c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: TEXT</P> 1059c07b06f12ac1f93b35f3e120a5e7d6aa5f934c6fErik */ 1060651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String EVENT_END_TIMEZONE = "eventEndTimezone"; 1061c07b06f12ac1f93b35f3e120a5e7d6aa5f934c6fErik 1062c07b06f12ac1f93b35f3e120a5e7d6aa5f934c6fErik /** 1063c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Is the event all day (time zone independent). Column name. 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALL_DAY = "allDay"; 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1069651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * Defines how the event shows up for others when the calendar is 1070c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * shared. Column name. 1071c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER (One of {@link #ACCESS_DEFAULT}, ...)</P> 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1073651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String ACCESS_LEVEL = "accessLevel"; 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1075651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 1076651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * Default access is controlled by the server and will be treated as 1077651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * public on the device. 1078651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 1079651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int ACCESS_DEFAULT = 0; 1080651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 1081651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * Confidential is not used by the app. 1082651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 1083651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int ACCESS_CONFIDENTIAL = 1; 1084651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 1085c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Private shares the event as a free/busy slot with no details. 1086651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 1087651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int ACCESS_PRIVATE = 2; 1088651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 1089c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Public makes the contents visible to anyone with access to the 1090651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * calendar. 1091651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 1092651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int ACCESS_PUBLIC = 3; 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1095651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * If this event counts as busy time or is still free time that can be 1096c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * scheduled over. Column name. 10974172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * <P> 10984172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * Type: INTEGER (One of {@link #AVAILABILITY_BUSY}, 10994172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * {@link #AVAILABILITY_FREE}, {@link #AVAILABILITY_TENTATIVE}) 11004172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * </P> 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1102651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String AVAILABILITY = "availability"; 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1104651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 1105651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * Indicates that this event takes up time and will conflict with other 1106651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * events. 1107651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 1108651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int AVAILABILITY_BUSY = 0; 1109651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 1110651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * Indicates that this event is free time and will not conflict with 1111651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * other events. 1112651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 1113651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int AVAILABILITY_FREE = 1; 1114f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 1115f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * Indicates that the owner's availability may change, but should be 1116f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * considered busy time that will conflict. 1117f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 1118f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik public static final int AVAILABILITY_TENTATIVE = 2; 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1121c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether the event has an alarm or not. Column name. 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String HAS_ALARM = "hasAlarm"; 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1127c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether the event has extended properties or not. Column name. 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String HAS_EXTENDED_PROPERTIES = "hasExtendedProperties"; 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1133c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The recurrence rule for the event. Column name. 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String RRULE = "rrule"; 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1139c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The recurrence dates for the event. Column name. 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String RDATE = "rdate"; 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1145c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The recurrence exception rule for the event. Column name. 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXRULE = "exrule"; 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1151c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The recurrence exception dates for the event. Column name. 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXDATE = "exdate"; 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1157c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The {@link Events#_ID} of the original recurring event for which this 1158c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * event is an exception. Column name. 1159c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik * <P>Type: TEXT</P> 1160c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik */ 1161c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik public static final String ORIGINAL_ID = "original_id"; 1162c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik 1163c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik /** 11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The _sync_id of the original recurring event for which this event is 1165c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik * an exception. The provider should keep the original_id in sync when 1166c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * this is updated. Column name. 11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1169651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String ORIGINAL_SYNC_ID = "original_sync_id"; 11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The original instance time of the recurring event for which this 1173c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * event is an exception. Column name. 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ORIGINAL_INSTANCE_TIME = "originalInstanceTime"; 11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The allDay status (true or false) of the original recurring event 1180c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * for which this event is an exception. Column name. 11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ORIGINAL_ALL_DAY = "originalAllDay"; 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1186c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The last date this event repeats on, or NULL if it never ends. Column 1187c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * name. 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String LAST_DATE = "lastDate"; 119179f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff 119279f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff /** 119379f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff * Whether the event has attendee information. True if the event 119479f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff * has full attendee data, false if the event has information about 1195c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * self only. Column name. 119679f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff * <P>Type: INTEGER (boolean)</P> 119779f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff */ 119879f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff public static final String HAS_ATTENDEE_DATA = "hasAttendeeData"; 11993d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff 12003d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff /** 1201c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether guests can modify the event. Column name. 12023d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff * <P>Type: INTEGER (boolean)</P> 12033d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff */ 12043d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff public static final String GUESTS_CAN_MODIFY = "guestsCanModify"; 12053d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff 12063d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff /** 1207c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether guests can invite other guests. Column name. 12083d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff * <P>Type: INTEGER (boolean)</P> 12093d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff */ 12103d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff public static final String GUESTS_CAN_INVITE_OTHERS = "guestsCanInviteOthers"; 12113d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff 12123d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff /** 1213c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether guests can see the list of attendees. Column name. 12143d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff * <P>Type: INTEGER (boolean)</P> 12153d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff */ 12163d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff public static final String GUESTS_CAN_SEE_GUESTS = "guestsCanSeeGuests"; 12173d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff 12183d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff /** 1219c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Email of the organizer (owner) of the event. Column name. 12203d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff * <P>Type: STRING</P> 12213d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff */ 12223d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff public static final String ORGANIZER = "organizer"; 12233d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff 12243d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff /** 12250a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert * Are we the organizer of this event. If this column is not explicitly set, the provider 12260a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert * will return 1 if {@link #ORGANIZER} is equal to {@link Calendars#OWNER_ACCOUNT}. 12270a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert * Column name. 12280a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert * <P>Type: STRING</P> 12290a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert */ 12300a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert public static final String IS_ORGANIZER = "isOrganizer"; 12310a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert 12320a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert /** 1233c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether the user can invite others to the event. The 1234c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * GUESTS_CAN_INVITE_OTHERS is a setting that applies to an arbitrary 1235c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * guest, while CAN_INVITE_OTHERS indicates if the user can invite 1236c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * others (either through GUESTS_CAN_INVITE_OTHERS or because the user 1237c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * has modify access to the event). Column name. 12383d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff * <P>Type: INTEGER (boolean, readonly)</P> 12393d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff */ 12403d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff public static final String CAN_INVITE_OTHERS = "canInviteOthers"; 124137960c7f58197404d2331a0ea81194ffc98552c1Michael Chan 124237960c7f58197404d2331a0ea81194ffc98552c1Michael Chan /** 124337960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * The package name of the custom app that can provide a richer 124437960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * experience for the event. See the ACTION TYPE 124537960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * {@link CalendarContract#ACTION_HANDLE_CUSTOM_EVENT} for details. 124637960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * Column name. 124737960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * <P> Type: TEXT </P> 124837960c7f58197404d2331a0ea81194ffc98552c1Michael Chan */ 124937960c7f58197404d2331a0ea81194ffc98552c1Michael Chan public static final String CUSTOM_APP_PACKAGE = "customAppPackage"; 125037960c7f58197404d2331a0ea81194ffc98552c1Michael Chan 125137960c7f58197404d2331a0ea81194ffc98552c1Michael Chan /** 125237960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * The URI used by the custom app for the event. Column name. 125337960c7f58197404d2331a0ea81194ffc98552c1Michael Chan * <P>Type: TEXT</P> 125437960c7f58197404d2331a0ea81194ffc98552c1Michael Chan */ 125537960c7f58197404d2331a0ea81194ffc98552c1Michael Chan public static final String CUSTOM_APP_URI = "customAppUri"; 125637960c7f58197404d2331a0ea81194ffc98552c1Michael Chan 12574d6f90ea503c65009b47881ed117f8c15c660cc0Sara Ting /** 12584d6f90ea503c65009b47881ed117f8c15c660cc0Sara Ting * The UID for events added from the RFC 2445 iCalendar format. 12594d6f90ea503c65009b47881ed117f8c15c660cc0Sara Ting * Column name. 12604d6f90ea503c65009b47881ed117f8c15c660cc0Sara Ting * <P>Type: TEXT</P> 12614d6f90ea503c65009b47881ed117f8c15c660cc0Sara Ting */ 12624d6f90ea503c65009b47881ed117f8c15c660cc0Sara Ting public static final String UID_2445 = "uid2445"; 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1266c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Class that represents an Event Entity. There is one entry per event. 1267c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Recurring events show up as a single entry. This is a helper class to 1268c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * make batch operations easier. A {@link ContentResolver} or 1269c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * {@link ContentProviderClient} is required as the helper does additional 1270c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * queries to add reminders and attendees to each entry. 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1272651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final class EventsEntity implements BaseColumns, SyncColumns, EventsColumns { 1273328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 1274328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana * The content:// style URL for this table 1275328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 1276a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + 1277a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff "/event_entities"); 1278328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1279c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 12803672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 12813672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 12823672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private EventsEntity() {} 12833672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 12843672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 1285c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Creates a new iterator for events 1286c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1287c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cursor An event query 1288c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param resolver For performing additional queries 1289c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return an EntityIterator containing one entity per event in the 1290c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * cursor 1291c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 1292328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public static EntityIterator newEntityIterator(Cursor cursor, ContentResolver resolver) { 1293328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana return new EntityIteratorImpl(cursor, resolver); 1294328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1295328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1296c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1297c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Creates a new iterator for events 1298c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1299c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cursor An event query 1300c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param provider For performing additional queries 1301c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return an EntityIterator containing one entity per event in the 1302c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * cursor 1303c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 1304328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public static EntityIterator newEntityIterator(Cursor cursor, 1305328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ContentProviderClient provider) { 1306328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana return new EntityIteratorImpl(cursor, provider); 1307328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1308328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1309328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static class EntityIteratorImpl extends CursorEntityIterator { 1310328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private final ContentResolver mResolver; 1311328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private final ContentProviderClient mProvider; 1312328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1313328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final String[] REMINDERS_PROJECTION = new String[] { 1314328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Reminders.MINUTES, 1315328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Reminders.METHOD, 1316328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana }; 1317328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_MINUTES = 0; 1318328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_METHOD = 1; 1319328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1320328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final String[] ATTENDEES_PROJECTION = new String[] { 1321328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Attendees.ATTENDEE_NAME, 1322328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Attendees.ATTENDEE_EMAIL, 1323328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Attendees.ATTENDEE_RELATIONSHIP, 1324328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Attendees.ATTENDEE_TYPE, 1325328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Attendees.ATTENDEE_STATUS, 132648ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan Attendees.ATTENDEE_IDENTITY, 132748ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan Attendees.ATTENDEE_ID_NAMESPACE 1328328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana }; 1329328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_ATTENDEE_NAME = 0; 1330328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_ATTENDEE_EMAIL = 1; 1331328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_ATTENDEE_RELATIONSHIP = 2; 1332328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_ATTENDEE_TYPE = 3; 1333328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_ATTENDEE_STATUS = 4; 133448ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan private static final int COLUMN_ATTENDEE_IDENTITY = 5; 133548ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan private static final int COLUMN_ATTENDEE_ID_NAMESPACE = 6; 133648ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan 1337328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final String[] EXTENDED_PROJECTION = new String[] { 13388f643c1040d45f03584b0382c7c5d933388b9103Marc Blank ExtendedProperties._ID, 1339328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ExtendedProperties.NAME, 13408f643c1040d45f03584b0382c7c5d933388b9103Marc Blank ExtendedProperties.VALUE 1341328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana }; 13428f643c1040d45f03584b0382c7c5d933388b9103Marc Blank private static final int COLUMN_ID = 0; 13438f643c1040d45f03584b0382c7c5d933388b9103Marc Blank private static final int COLUMN_NAME = 1; 13448f643c1040d45f03584b0382c7c5d933388b9103Marc Blank private static final int COLUMN_VALUE = 2; 1345328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 13461dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio private static final String WHERE_EVENT_ID = "event_id=?"; 13471dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 1348328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public EntityIteratorImpl(Cursor cursor, ContentResolver resolver) { 1349328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana super(cursor); 1350328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana mResolver = resolver; 1351328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana mProvider = null; 1352328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1353328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1354328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public EntityIteratorImpl(Cursor cursor, ContentProviderClient provider) { 1355328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana super(cursor); 1356328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana mResolver = null; 1357328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana mProvider = provider; 1358328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1359328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 136064a556d755d27b1182897e9243cf4f3016e76a88Marc Blank @Override 1361328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public Entity getEntityAndIncrementCursor(Cursor cursor) throws RemoteException { 1362328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana // we expect the cursor is already at the row we need to read from 1363328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana final long eventId = cursor.getLong(cursor.getColumnIndexOrThrow(Events._ID)); 1364328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ContentValues cv = new ContentValues(); 1365328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana cv.put(Events._ID, eventId); 1366328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, CALENDAR_ID); 1367328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, TITLE); 1368328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, DESCRIPTION); 1369328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EVENT_LOCATION); 1370328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, STATUS); 1371328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, SELF_ATTENDEE_STATUS); 1372328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DTSTART); 1373328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DTEND); 1374328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, DURATION); 1375328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EVENT_TIMEZONE); 1376c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EVENT_END_TIMEZONE); 1377328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ALL_DAY); 1378651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, ACCESS_LEVEL); 1379651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, AVAILABILITY); 1380971c28b83109900e36c525bc30c9e9f5397ebb1dAlon Albert DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, EVENT_COLOR); 13810a35dd5660ea3aac7676054fcdb39afadd639f8cAlon Albert DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EVENT_COLOR_KEY); 1382328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, HAS_ALARM); 1383328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, 1384328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana HAS_EXTENDED_PROPERTIES); 1385328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, RRULE); 1386328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, RDATE); 1387328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EXRULE); 1388328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EXDATE); 1389651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ORIGINAL_SYNC_ID); 1390c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ORIGINAL_ID); 1391328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, 1392328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ORIGINAL_INSTANCE_TIME); 1393328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, ORIGINAL_ALL_DAY); 1394328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, LAST_DATE); 1395328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, HAS_ATTENDEE_DATA); 1396328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 1397328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana GUESTS_CAN_INVITE_OTHERS); 1398328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, GUESTS_CAN_MODIFY); 1399328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, GUESTS_CAN_SEE_GUESTS); 1400bb9fd4a0c49802e181413c3d2978acc111da673fMichael Chan DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CUSTOM_APP_PACKAGE); 1401bb9fd4a0c49802e181413c3d2978acc111da673fMichael Chan DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CUSTOM_APP_URI); 14024d6f90ea503c65009b47881ed117f8c15c660cc0Sara Ting DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, UID_2445); 1403328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ORGANIZER); 14040a9a219c96b0352c5bf6f891e9f4d9ac360792d5Alon Albert DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, IS_ORGANIZER); 1405328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, _SYNC_ID); 1406651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DIRTY); 14078ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, MUTATORS); 1408866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, LAST_SYNCED); 1409c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, DELETED); 14109734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA1); 14119734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA2); 14129734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA3); 14139734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA4); 14149734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA5); 14159734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA6); 14169734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA7); 14179734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA8); 14189734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA9); 14199734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA10); 1420be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC1); 1421be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC2); 1422be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC3); 1423be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC4); 1424be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC5); 1425be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC6); 14269734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC7); 14279734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC8); 14289734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC9); 14299734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC10); 1430328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1431328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Entity entity = new Entity(cv); 1432328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Cursor subCursor; 1433328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana if (mResolver != null) { 1434328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mResolver.query(Reminders.CONTENT_URI, REMINDERS_PROJECTION, 14351dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 14361dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 14371dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1438328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } else { 1439328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mProvider.query(Reminders.CONTENT_URI, REMINDERS_PROJECTION, 14401dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 14411dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 14421dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1443328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1444328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana try { 1445328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana while (subCursor.moveToNext()) { 1446328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ContentValues reminderValues = new ContentValues(); 1447328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana reminderValues.put(Reminders.MINUTES, subCursor.getInt(COLUMN_MINUTES)); 1448328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana reminderValues.put(Reminders.METHOD, subCursor.getInt(COLUMN_METHOD)); 1449328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana entity.addSubValue(Reminders.CONTENT_URI, reminderValues); 1450328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1451328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } finally { 1452328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.close(); 1453328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1454328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1455328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana if (mResolver != null) { 1456328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mResolver.query(Attendees.CONTENT_URI, ATTENDEES_PROJECTION, 14571dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 14581dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 14591dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1460328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } else { 1461328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mProvider.query(Attendees.CONTENT_URI, ATTENDEES_PROJECTION, 14621dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 14631dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 14641dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1465328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1466328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana try { 1467328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana while (subCursor.moveToNext()) { 1468328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ContentValues attendeeValues = new ContentValues(); 1469328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana attendeeValues.put(Attendees.ATTENDEE_NAME, 1470328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.getString(COLUMN_ATTENDEE_NAME)); 1471328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana attendeeValues.put(Attendees.ATTENDEE_EMAIL, 1472328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.getString(COLUMN_ATTENDEE_EMAIL)); 1473328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana attendeeValues.put(Attendees.ATTENDEE_RELATIONSHIP, 1474328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.getInt(COLUMN_ATTENDEE_RELATIONSHIP)); 1475328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana attendeeValues.put(Attendees.ATTENDEE_TYPE, 1476328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.getInt(COLUMN_ATTENDEE_TYPE)); 1477328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana attendeeValues.put(Attendees.ATTENDEE_STATUS, 1478328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.getInt(COLUMN_ATTENDEE_STATUS)); 147948ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan attendeeValues.put(Attendees.ATTENDEE_IDENTITY, 1480a07ea5da0751ca297f9176d9deb2e8af9597dfabMichael Chan subCursor.getString(COLUMN_ATTENDEE_IDENTITY)); 148148ec622265b922de08ded4dd0e04281b5cfe2ed9Michael Chan attendeeValues.put(Attendees.ATTENDEE_ID_NAMESPACE, 1482a07ea5da0751ca297f9176d9deb2e8af9597dfabMichael Chan subCursor.getString(COLUMN_ATTENDEE_ID_NAMESPACE)); 1483328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana entity.addSubValue(Attendees.CONTENT_URI, attendeeValues); 1484328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1485328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } finally { 1486328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.close(); 1487328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1488328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1489328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana if (mResolver != null) { 1490328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mResolver.query(ExtendedProperties.CONTENT_URI, EXTENDED_PROJECTION, 14911dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 14921dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 14931dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1494328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } else { 1495328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mProvider.query(ExtendedProperties.CONTENT_URI, EXTENDED_PROJECTION, 14961dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 14971dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 14981dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1499328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1500328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana try { 1501328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana while (subCursor.moveToNext()) { 1502328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ContentValues extendedValues = new ContentValues(); 15038f643c1040d45f03584b0382c7c5d933388b9103Marc Blank extendedValues.put(ExtendedProperties._ID, 15048f643c1040d45f03584b0382c7c5d933388b9103Marc Blank subCursor.getString(COLUMN_ID)); 15053b16892c6bc6b804133163db24ffc5ff54b9a8fbKen Shirriff extendedValues.put(ExtendedProperties.NAME, 15063b16892c6bc6b804133163db24ffc5ff54b9a8fbKen Shirriff subCursor.getString(COLUMN_NAME)); 1507328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana extendedValues.put(ExtendedProperties.VALUE, 15083b16892c6bc6b804133163db24ffc5ff54b9a8fbKen Shirriff subCursor.getString(COLUMN_VALUE)); 1509328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana entity.addSubValue(ExtendedProperties.CONTENT_URI, extendedValues); 1510328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1511328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } finally { 1512328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.close(); 1513328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1514328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1515328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana cursor.moveToNext(); 1516328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana return entity; 1517328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1518328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1519328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1520328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1521328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 1522f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * Constants and helpers for the Events table, which contains details for 1523f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * individual events. <h3>Operations</h3> All operations can be done either 1524f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * as an app or as a sync adapter. To perform an operation as a sync adapter 1525f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link #CALLER_IS_SYNCADAPTER} should be set to true and 1526f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link #ACCOUNT_NAME} and {@link #ACCOUNT_TYPE} must be set in the Uri 1527f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * parameters. See 1528f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link Uri.Builder#appendQueryParameter(java.lang.String, java.lang.String)} 1529f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * for details on adding parameters. Sync adapters have write access to more 1530f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * columns but are restricted to a single account at a time. 1531fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dl> 1532fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dt><b>Insert</b></dt> 1533fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dd>When inserting a new event the following fields must be included: 1534fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <ul> 1535fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>dtstart</li> 1536e6fbf65de6eb8fa3ef87291d86de426e568c19ebMichael Chan * <li>dtend if the event is non-recurring</li> 1537e6fbf65de6eb8fa3ef87291d86de426e568c19ebMichael Chan * <li>duration if the event is recurring</li> 1538e6fbf65de6eb8fa3ef87291d86de426e568c19ebMichael Chan * <li>rrule or rdate if the event is recurring</li> 15394172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * <li>eventTimezone</li> 1540fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>a calendar_id</li> 1541fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * </ul> 1542fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * There are also further requirements when inserting or updating an event. 1543fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * See the section on Writing to Events.</dd> 1544fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dt><b>Update</b></dt> 1545f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dd>To perform an update of an Event the {@link Events#_ID} of the event 1546f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * should be provided either as an appended id to the Uri ( 1547fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * {@link ContentUris#withAppendedId}) or as the first selection item--the 1548fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * selection should start with "_id=?" and the first selectionArg should be 1549f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * the _id of the event. Updates may also be done using a selection and no 1550f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * id. Updating an event must respect the same rules as inserting and is 1551f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * further restricted in the fields that can be written. See the section on 1552f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * Writing to Events.</dd> 1553fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dt><b>Delete</b></dt> 1554fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dd>Events can be deleted either by the {@link Events#_ID} as an appended 1555fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * id on the Uri or using any standard selection. If an appended id is used 1556fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * a selection is not allowed. There are two versions of delete: as an app 1557fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * and as a sync adapter. An app delete will set the deleted column on an 1558fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * event and remove all instances of that event. A sync adapter delete will 1559fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * remove the event from the database and all associated data.</dd> 1560fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dt><b>Query</b></dt> 1561fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dd>Querying the Events table will get you all information about a set of 1562fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * events except their reminders, attendees, and extended properties. There 1563fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * will be one row returned for each event that matches the query selection, 1564fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * or at most a single row if the {@link Events#_ID} is appended to the Uri. 1565fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * Recurring events will only return a single row regardless of the number 1566fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * of times that event repeats.</dd> 1567fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * </dl> 1568fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <h3>Writing to Events</h3> There are further restrictions on all Updates 1569fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * and Inserts in the Events table: 1570fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <ul> 1571fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>If allDay is set to 1 eventTimezone must be {@link Time#TIMEZONE_UTC} 1572fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * and the time must correspond to a midnight boundary.</li> 1573fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>Exceptions are not allowed to recur. If rrule or rdate is not empty, 1574fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * original_id and original_sync_id must be empty.</li> 1575fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>In general a calendar_id should not be modified after insertion. This 1576fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * is not explicitly forbidden but many sync adapters will not behave in an 1577fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * expected way if the calendar_id is modified.</li> 1578fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * </ul> 1579fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * The following Events columns are writable by both an app and a sync 1580fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * adapter. 1581fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <ul> 1582fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #CALENDAR_ID}</li> 1583fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ORGANIZER}</li> 1584fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #TITLE}</li> 1585fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EVENT_LOCATION}</li> 1586fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #DESCRIPTION}</li> 1587fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EVENT_COLOR}</li> 1588fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #DTSTART}</li> 1589fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #DTEND}</li> 1590fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EVENT_TIMEZONE}</li> 1591fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EVENT_END_TIMEZONE}</li> 1592fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #DURATION}</li> 1593fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ALL_DAY}</li> 1594fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #RRULE}</li> 1595fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #RDATE}</li> 1596fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EXRULE}</li> 1597fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EXDATE}</li> 1598fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ORIGINAL_ID}</li> 1599fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ORIGINAL_SYNC_ID}</li> 1600fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ORIGINAL_INSTANCE_TIME}</li> 1601fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ORIGINAL_ALL_DAY}</li> 1602fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ACCESS_LEVEL}</li> 1603fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #AVAILABILITY}</li> 1604fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #GUESTS_CAN_MODIFY}</li> 1605fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #GUESTS_CAN_INVITE_OTHERS}</li> 1606fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #GUESTS_CAN_SEE_GUESTS}</li> 1607bb9fd4a0c49802e181413c3d2978acc111da673fMichael Chan * <li>{@link #CUSTOM_APP_PACKAGE}</li> 1608bb9fd4a0c49802e181413c3d2978acc111da673fMichael Chan * <li>{@link #CUSTOM_APP_URI}</li> 16094d6f90ea503c65009b47881ed117f8c15c660cc0Sara Ting * <li>{@link #UID_2445}</li> 1610fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * </ul> 1611fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * The following Events columns are writable only by a sync adapter 1612fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <ul> 1613fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #DIRTY}</li> 16148ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert * <li>{@link #MUTATORS}</li> 1615fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #_SYNC_ID}</li> 1616fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA1}</li> 1617fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA2}</li> 1618fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA3}</li> 1619fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA4}</li> 1620fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA5}</li> 1621fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA6}</li> 1622fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA7}</li> 1623fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA8}</li> 1624fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA9}</li> 1625fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA10}</li> 1626fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * </ul> 1627fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * The remaining columns are either updated by the provider only or are 1628fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * views into other tables and cannot be changed through the Events table. 1629328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 16309734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final class Events implements BaseColumns, SyncColumns, EventsColumns, 1631e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik CalendarColumns { 16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1633c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1634c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for interacting with events. Appending an 1635c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * event id using {@link ContentUris#withAppendedId(Uri, long)} will 1636c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * specify a single event. 16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1638c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri CONTENT_URI = 1640a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff Uri.parse("content://" + AUTHORITY + "/events"); 16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16434a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden * The content:// style URI for recurring event exceptions. Insertions require an 16444a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden * appended event ID. Deletion of exceptions requires both the original event ID and 16454a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden * the exception event ID (see {@link Uri.Builder#appendPath}). 16464a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden */ 1647083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final Uri CONTENT_EXCEPTION_URI = 16484a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden Uri.parse("content://" + AUTHORITY + "/exception"); 16494a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden 16504a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden /** 16513672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 16523672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 16533672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private Events() {} 16543672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 16553672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 16569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 16579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1658c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String DEFAULT_SORT_ORDER = ""; 1659651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik 1660651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 1661651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * These are columns that should only ever be updated by the provider, 1662651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * either because they are views mapped to another table or because they 1663083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * are used for provider only functionality. TODO move to provider 1664083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * 1665083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 1666651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 1667651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static String[] PROVIDER_WRITABLE_COLUMNS = new String[] { 1668651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik ACCOUNT_NAME, 1669c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik ACCOUNT_TYPE, 1670c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC1, 1671c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC2, 1672c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC3, 1673c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC4, 1674c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC5, 1675866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert CAL_SYNC6, 16769734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC7, 16779734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC8, 16789734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC9, 16799734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC10, 16809734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik ALLOWED_REMINDERS, 1681c7ef9390cf37c5e87d1015a83f113df6a2d1b3e5RoboErik ALLOWED_ATTENDEE_TYPES, 1682c7ef9390cf37c5e87d1015a83f113df6a2d1b3e5RoboErik ALLOWED_AVAILABILITY, 16839734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_ACCESS_LEVEL, 16849734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_COLOR, 16859734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_TIME_ZONE, 16869734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAN_MODIFY_TIME_ZONE, 16879734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAN_ORGANIZER_RESPOND, 16889734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_DISPLAY_NAME, 1689866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert CAN_PARTIALLY_UPDATE, 16909734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_EVENTS, 16919734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik VISIBLE, 1692651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik }; 1693651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik 1694651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 1695651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * These fields are only writable by a sync adapter. To modify them the 1696651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * caller must include CALLER_IS_SYNCADAPTER, _SYNC_ACCOUNT, and 1697083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * _SYNC_ACCOUNT_TYPE in the query parameters. TODO move to provider. 1698083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * 1699083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 1700651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 1701651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String[] SYNC_WRITABLE_COLUMNS = new String[] { 1702651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik _SYNC_ID, 1703651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DIRTY, 17048ac6a63a94494b356b30f076d7ad52fcc6024935Alon Albert MUTATORS, 17059734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA1, 17069734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA2, 17079734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA3, 17089734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA4, 17099734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA5, 17109734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA6, 17119734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA7, 17129734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA8, 17139734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA9, 17149734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA10, 1715651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik }; 17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1719c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Fields and helpers for interacting with Instances. An instance is a 1720c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * single occurrence of an event including time zone specific start and end 17213771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * days and minutes. The instances table is not writable and only provides a 17223771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * way to query event occurrences. 17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1724e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik public static final class Instances implements BaseColumns, EventsColumns, CalendarColumns { 17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1726e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik private static final String WHERE_CALENDARS_SELECTED = Calendars.VISIBLE + "=?"; 1727e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik private static final String[] WHERE_CALENDARS_ARGS = { 1728e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik "1" 1729e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik }; 17301dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 1731c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 17323672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 17333672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 17343672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private Instances() {} 17353672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 17363672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 1737c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Performs a query to return all visible instances in the given range. 1738c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * This is a blocking function and should not be done on the UI thread. 1739c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * This will cause an expansion of recurring events to fill this time 1740c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * range if they are not already expanded and will slow down for larger 1741c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * time ranges with many recurring events. 1742c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1743c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cr The ContentResolver to use for the query 1744c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param projection The columns to return 1745c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param begin The start of the time range to query in UTC millis since 1746c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * epoch 1747c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param end The end of the time range to query in UTC millis since 1748c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * epoch 1749c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return A Cursor containing all instances in the given range 1750c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Cursor query(ContentResolver cr, String[] projection, 17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long begin, long end) { 17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.Builder builder = CONTENT_URI.buildUpon(); 17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentUris.appendId(builder, begin); 17559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentUris.appendId(builder, end); 17561dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio return cr.query(builder.build(), projection, WHERE_CALENDARS_SELECTED, 1757e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik WHERE_CALENDARS_ARGS, DEFAULT_SORT_ORDER); 17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1760c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1761c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Performs a query to return all visible instances in the given range 1762c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * that match the given query. This is a blocking function and should 1763c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * not be done on the UI thread. This will cause an expansion of 1764c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * recurring events to fill this time range if they are not already 1765c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * expanded and will slow down for larger time ranges with many 1766c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * recurring events. 1767c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1768c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cr The ContentResolver to use for the query 1769c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param projection The columns to return 1770c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param begin The start of the time range to query in UTC millis since 1771c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * epoch 1772c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param end The end of the time range to query in UTC millis since 1773c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * epoch 1774c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param searchQuery A string of space separated search terms. Segments 1775c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * enclosed by double quotes will be treated as a single 1776c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * term. 1777c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return A Cursor of instances matching the search terms in the given 1778c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * time range 1779c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Cursor query(ContentResolver cr, String[] projection, 178119f845804c4b8f295669bbe7338d91d42451a0fdMason Tang long begin, long end, String searchQuery) { 178219f845804c4b8f295669bbe7338d91d42451a0fdMason Tang Uri.Builder builder = CONTENT_SEARCH_URI.buildUpon(); 178319f845804c4b8f295669bbe7338d91d42451a0fdMason Tang ContentUris.appendId(builder, begin); 178419f845804c4b8f295669bbe7338d91d42451a0fdMason Tang ContentUris.appendId(builder, end); 1785c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik builder = builder.appendPath(searchQuery); 1786e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik return cr.query(builder.build(), projection, WHERE_CALENDARS_SELECTED, 1787e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik WHERE_CALENDARS_ARGS, DEFAULT_SORT_ORDER); 178819f845804c4b8f295669bbe7338d91d42451a0fdMason Tang } 178919f845804c4b8f295669bbe7338d91d42451a0fdMason Tang 17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1791c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for querying an instance range. The begin 1792c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * and end of the range to query should be added as path segments if 1793c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * this is used directly. 17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1795c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 1796a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + 1797a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff "/instances/when"); 1798c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1799c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for querying an instance range by Julian 1800c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Day. The start and end day should be added as path segments if this 1801c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * is used directly. 1802c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 18032cfb0d166b5e8a0e89b2b3d19abe4f76ff38cfabMichael Chan public static final Uri CONTENT_BY_DAY_URI = 1804a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff Uri.parse("content://" + AUTHORITY + "/instances/whenbyday"); 1805c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1806c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for querying an instance range with a search 1807c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * term. The begin, end, and search string should be appended as path 1808c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * segments if this is used directly. 1809c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 181019f845804c4b8f295669bbe7338d91d42451a0fdMason Tang public static final Uri CONTENT_SEARCH_URI = Uri.parse("content://" + AUTHORITY + 181119f845804c4b8f295669bbe7338d91d42451a0fdMason Tang "/instances/search"); 1812c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1813c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for querying an instance range with a search 1814c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * term. The start day, end day, and search string should be appended as 1815c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * path segments if this is used directly. 1816c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 181719f845804c4b8f295669bbe7338d91d42451a0fdMason Tang public static final Uri CONTENT_SEARCH_BY_DAY_URI = 181819f845804c4b8f295669bbe7338d91d42451a0fdMason Tang Uri.parse("content://" + AUTHORITY + "/instances/searchbyday"); 18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table. 18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1823c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String DEFAULT_SORT_ORDER = "begin ASC"; 18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1826c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The beginning time of the instance, in UTC milliseconds. Column name. 18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String BEGIN = "begin"; 18309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1832c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The ending time of the instance, in UTC milliseconds. Column name. 18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 18349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String END = "end"; 18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1838c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The _id of the event for this instance. Column name. 18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long, foreign key to the Events table)</P> 18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_ID = "event_id"; 18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1844c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The Julian start day of the instance, relative to the local time 1845c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * zone. Column name. 18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 18479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String START_DAY = "startDay"; 18499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1851c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The Julian end day of the instance, relative to the local time 1852c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * zone. Column name. 18539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 18549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String END_DAY = "endDay"; 18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The start minute of the instance measured from midnight in the 1859c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * local time zone. Column name. 18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String START_MINUTE = "startMinute"; 18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The end minute of the instance measured from midnight in the 1866c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * local time zone. Column name. 18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String END_MINUTE = "endMinute"; 18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1872b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface CalendarCacheColumns { 187371ad58c751eb12a500916556c41e704a93895801Erik /** 1874c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The key for the setting. Keys are defined in {@link CalendarCache}. 187571ad58c751eb12a500916556c41e704a93895801Erik */ 187671ad58c751eb12a500916556c41e704a93895801Erik public static final String KEY = "key"; 187771ad58c751eb12a500916556c41e704a93895801Erik 187871ad58c751eb12a500916556c41e704a93895801Erik /** 187971ad58c751eb12a500916556c41e704a93895801Erik * The value of the given setting. 188071ad58c751eb12a500916556c41e704a93895801Erik */ 188171ad58c751eb12a500916556c41e704a93895801Erik public static final String VALUE = "value"; 188271ad58c751eb12a500916556c41e704a93895801Erik } 188371ad58c751eb12a500916556c41e704a93895801Erik 1884083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik /** 1885083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * CalendarCache stores some settings for calendar including the current 1886083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * time zone for the instances. These settings are stored using a key/value 1887083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * scheme. A {@link #KEY} must be specified when updating these values. 1888083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik */ 18893672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik public static final class CalendarCache implements CalendarCacheColumns { 189071ad58c751eb12a500916556c41e704a93895801Erik /** 189171ad58c751eb12a500916556c41e704a93895801Erik * The URI to use for retrieving the properties from the Calendar db. 189271ad58c751eb12a500916556c41e704a93895801Erik */ 189371ad58c751eb12a500916556c41e704a93895801Erik public static final Uri URI = 189471ad58c751eb12a500916556c41e704a93895801Erik Uri.parse("content://" + AUTHORITY + "/properties"); 189571ad58c751eb12a500916556c41e704a93895801Erik 189671ad58c751eb12a500916556c41e704a93895801Erik /** 18973672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 18983672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 18993672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private CalendarCache() {} 19003672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 19013672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 190271ad58c751eb12a500916556c41e704a93895801Erik * They key for updating the use of auto/home time zones in Calendar. 190371ad58c751eb12a500916556c41e704a93895801Erik * Valid values are {@link #TIMEZONE_TYPE_AUTO} or 190471ad58c751eb12a500916556c41e704a93895801Erik * {@link #TIMEZONE_TYPE_HOME}. 190571ad58c751eb12a500916556c41e704a93895801Erik */ 1906083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final String KEY_TIMEZONE_TYPE = "timezoneType"; 190771ad58c751eb12a500916556c41e704a93895801Erik 190871ad58c751eb12a500916556c41e704a93895801Erik /** 190971ad58c751eb12a500916556c41e704a93895801Erik * The key for updating the time zone used by the provider when it 191071ad58c751eb12a500916556c41e704a93895801Erik * generates the instances table. This should only be written if the 191171ad58c751eb12a500916556c41e704a93895801Erik * type is set to {@link #TIMEZONE_TYPE_HOME}. A valid time zone id 191271ad58c751eb12a500916556c41e704a93895801Erik * should be written to this field. 191371ad58c751eb12a500916556c41e704a93895801Erik */ 1914083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final String KEY_TIMEZONE_INSTANCES = "timezoneInstances"; 191571ad58c751eb12a500916556c41e704a93895801Erik 191671ad58c751eb12a500916556c41e704a93895801Erik /** 191771ad58c751eb12a500916556c41e704a93895801Erik * The key for reading the last time zone set by the user. This should 191871ad58c751eb12a500916556c41e704a93895801Erik * only be read by apps and it will be automatically updated whenever 1919083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * {@link #KEY_TIMEZONE_INSTANCES} is updated with 192071ad58c751eb12a500916556c41e704a93895801Erik * {@link #TIMEZONE_TYPE_HOME} set. 192171ad58c751eb12a500916556c41e704a93895801Erik */ 1922083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final String KEY_TIMEZONE_INSTANCES_PREVIOUS = "timezoneInstancesPrevious"; 192371ad58c751eb12a500916556c41e704a93895801Erik 192471ad58c751eb12a500916556c41e704a93895801Erik /** 1925083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * The value to write to {@link #KEY_TIMEZONE_TYPE} if the provider 192671ad58c751eb12a500916556c41e704a93895801Erik * should stay in sync with the device's time zone. 192771ad58c751eb12a500916556c41e704a93895801Erik */ 192871ad58c751eb12a500916556c41e704a93895801Erik public static final String TIMEZONE_TYPE_AUTO = "auto"; 192971ad58c751eb12a500916556c41e704a93895801Erik 193071ad58c751eb12a500916556c41e704a93895801Erik /** 1931083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * The value to write to {@link #KEY_TIMEZONE_TYPE} if the provider 193271ad58c751eb12a500916556c41e704a93895801Erik * should use a fixed time zone set by the user. 193371ad58c751eb12a500916556c41e704a93895801Erik */ 193471ad58c751eb12a500916556c41e704a93895801Erik public static final String TIMEZONE_TYPE_HOME = "home"; 193571ad58c751eb12a500916556c41e704a93895801Erik } 193671ad58c751eb12a500916556c41e704a93895801Erik 193771ad58c751eb12a500916556c41e704a93895801Erik /** 19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A few Calendar globals are needed in the CalendarProvider for expanding 193959dab49cb8350afd1baa77999ec2f91283d78536RoboErik * the Instances table and these are all stored in the first (and only) row 194059dab49cb8350afd1baa77999ec2f91283d78536RoboErik * of the CalendarMetaData table. 194159dab49cb8350afd1baa77999ec2f91283d78536RoboErik * 194259dab49cb8350afd1baa77999ec2f91283d78536RoboErik * @hide 19439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1944b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface CalendarMetaDataColumns { 19459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The local timezone that was used for precomputing the fields 19479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the Instances table. 19489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String LOCAL_TIMEZONE = "localTimezone"; 19509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The minimum time used in expanding the Instances table, 19539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in UTC milliseconds. 19549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 19559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIN_INSTANCE = "minInstance"; 19579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The maximum time used in expanding the Instances table, 19609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in UTC milliseconds. 19619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MAX_INSTANCE = "maxInstance"; 19649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19663763464e8f0df4d387ff46803e5a9c76045c85e6Erik * The minimum Julian day in the EventDays table. 19673763464e8f0df4d387ff46803e5a9c76045c85e6Erik * <P>Type: INTEGER</P> 19683763464e8f0df4d387ff46803e5a9c76045c85e6Erik */ 19693763464e8f0df4d387ff46803e5a9c76045c85e6Erik public static final String MIN_EVENTDAYS = "minEventDays"; 19703763464e8f0df4d387ff46803e5a9c76045c85e6Erik 19713763464e8f0df4d387ff46803e5a9c76045c85e6Erik /** 19723763464e8f0df4d387ff46803e5a9c76045c85e6Erik * The maximum Julian day in the EventDays table. 19733763464e8f0df4d387ff46803e5a9c76045c85e6Erik * <P>Type: INTEGER</P> 19743763464e8f0df4d387ff46803e5a9c76045c85e6Erik */ 19753763464e8f0df4d387ff46803e5a9c76045c85e6Erik public static final String MAX_EVENTDAYS = "maxEventDays"; 19769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19775b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 1978c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1979c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @hide 1980c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 1981505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final class CalendarMetaData implements CalendarMetaDataColumns, BaseColumns { 19823672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 19833672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 19843672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 19853672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 19863672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private CalendarMetaData() {} 19879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19883763464e8f0df4d387ff46803e5a9c76045c85e6Erik 1989b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface EventDaysColumns { 19903763464e8f0df4d387ff46803e5a9c76045c85e6Erik /** 1991c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The Julian starting day number. Column name. 19923763464e8f0df4d387ff46803e5a9c76045c85e6Erik * <P>Type: INTEGER (int)</P> 19933763464e8f0df4d387ff46803e5a9c76045c85e6Erik */ 19943763464e8f0df4d387ff46803e5a9c76045c85e6Erik public static final String STARTDAY = "startDay"; 1995c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1996c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The Julian ending day number. Column name. 1997c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER (int)</P> 1998c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 1999bd8e2e20a9a1d98f1521ec1f98b6403e73b275d3Erik public static final String ENDDAY = "endDay"; 20003763464e8f0df4d387ff46803e5a9c76045c85e6Erik 20013763464e8f0df4d387ff46803e5a9c76045c85e6Erik } 20023763464e8f0df4d387ff46803e5a9c76045c85e6Erik 2003c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2004c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Fields and helpers for querying for a list of days that contain events. 2005c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 20063763464e8f0df4d387ff46803e5a9c76045c85e6Erik public static final class EventDays implements EventDaysColumns { 2007b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY 2008c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik + "/instances/groupbyday"); 2009c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String SELECTION = "selected=1"; 20103763464e8f0df4d387ff46803e5a9c76045c85e6Erik 20113763464e8f0df4d387ff46803e5a9c76045c85e6Erik /** 20123672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 20133672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 20143672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private EventDays() {} 20153672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 20163672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 2017c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Retrieves the days with events for the Julian days starting at 2018c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * "startDay" for "numDays". It returns a cursor containing startday and 2019c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * endday representing the max range of days for all events beginning on 2020c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * each startday.This is a blocking function and should not be done on 2021c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * the UI thread. 20223672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * 20239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr the ContentResolver 20249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param startDay the first Julian day in the range 20259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param numDays the number of days to load (must be at least 1) 202658644028f909ecb429b26f909bedfb62a153d4e4RoboErik * @param projection the columns to return in the cursor 2027c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return a database cursor containing a list of start and end days for 2028c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * events 20299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 203058644028f909ecb429b26f909bedfb62a153d4e4RoboErik public static final Cursor query(ContentResolver cr, int startDay, int numDays, 203158644028f909ecb429b26f909bedfb62a153d4e4RoboErik String[] projection) { 20329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (numDays < 1) { 20339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 20349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int endDay = startDay + numDays - 1; 20369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.Builder builder = CONTENT_URI.buildUpon(); 20379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentUris.appendId(builder, startDay); 20389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentUris.appendId(builder, endDay); 203958644028f909ecb429b26f909bedfb62a153d4e4RoboErik return cr.query(builder.build(), projection, SELECTION, 20403763464e8f0df4d387ff46803e5a9c76045c85e6Erik null /* selection args */, STARTDAY); 20419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2044b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface RemindersColumns { 20459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2046c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The event the reminder belongs to. Column name. 20479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (foreign key to the Events table)</P> 20489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_ID = "event_id"; 20509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The minutes prior to the event that the alarm should ring. -1 20539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specifies that we should use the default value for the system. 2054c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Column name. 20559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 20569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MINUTES = "minutes"; 20589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2059c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2060c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Passing this as a minutes value will use the default reminder 2061c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * minutes. 2062c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 20639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MINUTES_DEFAULT = -1; 20649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2066c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The alarm method, as set on the server. {@link #METHOD_DEFAULT}, 2067bd2516165e4d38f1ee7f7f0ceb038ebf7ea1b84aAlon Albert * {@link #METHOD_ALERT}, {@link #METHOD_EMAIL}, {@link #METHOD_SMS} and 2068bd2516165e4d38f1ee7f7f0ceb038ebf7ea1b84aAlon Albert * {@link #METHOD_ALARM} are possible values; the device will only 2069bd2516165e4d38f1ee7f7f0ceb038ebf7ea1b84aAlon Albert * process {@link #METHOD_DEFAULT} and {@link #METHOD_ALERT} reminders 2070bd2516165e4d38f1ee7f7f0ceb038ebf7ea1b84aAlon Albert * (the other types are simply stored so we can send the same reminder 2071bd2516165e4d38f1ee7f7f0ceb038ebf7ea1b84aAlon Albert * info back to the server when we make changes). 20729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String METHOD = "method"; 20749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int METHOD_DEFAULT = 0; 20769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int METHOD_ALERT = 1; 20779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int METHOD_EMAIL = 2; 20789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int METHOD_SMS = 3; 2079bd2516165e4d38f1ee7f7f0ceb038ebf7ea1b84aAlon Albert public static final int METHOD_ALARM = 4; 20809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2082c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 20833771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * Fields and helpers for accessing reminders for an event. Each row of this 20843771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * table represents a single reminder for an event. Calling 208558644028f909ecb429b26f909bedfb62a153d4e4RoboErik * {@link #query(ContentResolver, long, String[])} will return a list of reminders for 20863771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * the event with the given eventId. Both apps and sync adapters may write 20873771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * to this table. There are three writable fields and all of them must be 20883771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * included when inserting a new reminder. They are: 20893771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <ul> 20903771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #EVENT_ID}</li> 20913771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #MINUTES}</li> 20923771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #METHOD}</li> 20933771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * </ul> 2094c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 20959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Reminders implements BaseColumns, RemindersColumns, EventsColumns { 2096bec6c36b96f7bc415af18abbb142bd51a1741796RoboErik private static final String REMINDERS_WHERE = CalendarContract.Reminders.EVENT_ID + "=?"; 2097c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 2098a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/reminders"); 2099c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik 2100c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 21013672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 21023672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 21033672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private Reminders() {} 21043672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 21053672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 2106c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Queries all reminders associated with the given event. This is a 2107c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * blocking call and should not be done on the UI thread. 21083672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * 2109c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cr The content resolver to use for the query 2110c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param eventId The id of the event to retrieve reminders for 211158644028f909ecb429b26f909bedfb62a153d4e4RoboErik * @param projection the columns to return in the cursor 2112c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return A Cursor containing all reminders for the event 2113c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 211458644028f909ecb429b26f909bedfb62a153d4e4RoboErik public static final Cursor query(ContentResolver cr, long eventId, String[] projection) { 2115c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik String[] remArgs = {Long.toString(eventId)}; 211658644028f909ecb429b26f909bedfb62a153d4e4RoboErik return cr.query(CONTENT_URI, projection, REMINDERS_WHERE, remArgs /*selection args*/, 2117c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik null /* sort order */); 2118c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik } 21199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2121b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface CalendarAlertsColumns { 21229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2123c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The event that the alert belongs to. Column name. 21249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (foreign key to the Events table)</P> 21259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_ID = "event_id"; 21279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2129c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The start time of the event, in UTC. Column name. 21309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 21319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String BEGIN = "begin"; 21339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2135c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The end time of the event, in UTC. Column name. 21369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 21379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String END = "end"; 21399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2141c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The alarm time of the event, in UTC. Column name. 21429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 21439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALARM_TIME = "alarmTime"; 21459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The creation time of this database entry, in UTC. 2148c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Useful for debugging missed reminders. Column name. 21499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 21509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CREATION_TIME = "creationTime"; 21529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time that the alarm broadcast was received by the Calendar app, 2155c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * in UTC. Useful for debugging missed reminders. Column name. 21569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 21579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String RECEIVED_TIME = "receivedTime"; 21599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time that the notification was created by the Calendar app, 2162c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * in UTC. Useful for debugging missed reminders. Column name. 21639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 21649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NOTIFY_TIME = "notifyTime"; 21669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2168083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * The state of this alert. It starts out as {@link #STATE_SCHEDULED}, then 2169083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * when the alarm goes off, it changes to {@link #STATE_FIRED}, and then when 2170083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * the user dismisses the alarm it changes to {@link #STATE_DISMISSED}. Column 2171c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * name. 21729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 21739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String STATE = "state"; 21759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2176083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik /** 2177083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * An alert begins in this state when it is first created. 2178083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik */ 2179083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final int STATE_SCHEDULED = 0; 2180083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik /** 2181083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * After a notification for an alert has been created it should be 2182083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * updated to fired. 2183083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik */ 2184083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final int STATE_FIRED = 1; 2185083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik /** 2186083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * Once the user has dismissed the notification the alert's state should 2187083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * be set to dismissed so it is not fired again. 2188083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik */ 2189083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final int STATE_DISMISSED = 2; 21909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2192c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The number of minutes that this alarm precedes the start time. Column 2193c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * name. 2194c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER</P> 21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MINUTES = "minutes"; 21979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2199c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The default sort order for this alerts queries 22009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2201cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan public static final String DEFAULT_SORT_ORDER = "begin ASC,title ASC"; 22029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2204c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2205c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Fields and helpers for accessing calendar alerts information. These 22063771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * fields are for tracking which alerts have been fired. Scheduled alarms 2207e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik * will generate an intent using {@link #ACTION_EVENT_REMINDER}. Apps that 22083771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * receive this action may update the {@link #STATE} for the reminder when 22093771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * they have finished handling it. Apps that have their notifications 22103771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * disabled should not modify the table to ensure that they do not conflict 22113771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * with another app that is generating a notification. In general, apps 22123771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * should not need to write to this table directly except to update the 22133771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * state of a reminder. 2214c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 22159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class CalendarAlerts implements BaseColumns, 2216e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik CalendarAlertsColumns, EventsColumns, CalendarColumns { 22171dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 2218c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2219c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @hide 2220c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 22219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String TABLE_NAME = "CalendarAlerts"; 2222c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2223c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The Uri for querying calendar alert information 2224c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 2225c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 2226a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + 2227a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff "/calendar_alerts"); 22285b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 22293672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 22303672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 22313672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 22323672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private CalendarAlerts() {} 22333672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 22341dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio private static final String WHERE_ALARM_EXISTS = EVENT_ID + "=?" 22351dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio + " AND " + BEGIN + "=?" 22361dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio + " AND " + ALARM_TIME + "=?"; 22371dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 22381dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio private static final String WHERE_FINDNEXTALARMTIME = ALARM_TIME + ">=?"; 22391dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio private static final String SORT_ORDER_ALARMTIME_ASC = ALARM_TIME + " ASC"; 22401dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 2241083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik private static final String WHERE_RESCHEDULE_MISSED_ALARMS = STATE + "=" + STATE_SCHEDULED 22421dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio + " AND " + ALARM_TIME + "<?" 22431dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio + " AND " + ALARM_TIME + ">?" 22441dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio + " AND " + END + ">=?"; 22451dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 22469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This URI is for grouping the query results by event_id and begin 22489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * time. This will return one result per instance of an event. So 22499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events with multiple alarms will appear just once, but multiple 22509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instances of a repeating event will show up multiple times. 22519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22525b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff public static final Uri CONTENT_URI_BY_INSTANCE = 2253a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff Uri.parse("content://" + AUTHORITY + "/calendar_alerts/by_instance"); 22549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2255083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik private static final boolean DEBUG = false; 2256cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 2257c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2258083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * Helper for inserting an alarm time associated with an event TODO move 2259083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * to Provider 2260c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 2261c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @hide 2262c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 22639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri insert(ContentResolver cr, long eventId, 22649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long begin, long end, long alarmTime, int minutes) { 22659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues values = new ContentValues(); 22669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.EVENT_ID, eventId); 22679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.BEGIN, begin); 22689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.END, end); 22699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.ALARM_TIME, alarmTime); 22709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long currentTime = System.currentTimeMillis(); 22719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.CREATION_TIME, currentTime); 22729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.RECEIVED_TIME, 0); 22739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.NOTIFY_TIME, 0); 2274083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik values.put(CalendarAlerts.STATE, STATE_SCHEDULED); 22759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.MINUTES, minutes); 22769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cr.insert(CONTENT_URI, values); 22779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 22809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Finds the next alarm after (or equal to) the given time and returns 2281c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * the time of that alarm or -1 if no such alarm exists. This is a 2282083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * blocking call and should not be done on the UI thread. TODO move to 2283083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * provider 22845b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff * 22859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr the ContentResolver 22869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param millis the time in UTC milliseconds 22879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the next alarm time greater than or equal to "millis", or -1 2288c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * if no such alarm exists. 2289083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 22909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final long findNextAlarmTime(ContentResolver cr, long millis) { 22929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String selection = ALARM_TIME + ">=" + millis; 22939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: construct an explicit SQL query so that we can add 22949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // "LIMIT 1" to the end and get just one result. 22959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] projection = new String[] { ALARM_TIME }; 2296083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik Cursor cursor = cr.query(CONTENT_URI, projection, WHERE_FINDNEXTALARMTIME, 2297083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik (new String[] { 22981dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio Long.toString(millis) 2299083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik }), SORT_ORDER_ALARMTIME_ASC); 23009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long alarmTime = -1; 23019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 23029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cursor != null && cursor.moveToFirst()) { 23039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project alarmTime = cursor.getLong(0); 23049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 23069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cursor != null) { 23079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor.close(); 23089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return alarmTime; 23119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23125b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 23139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Searches the CalendarAlerts table for alarms that should have fired 2315083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * but have not and then reschedules them. This method can be called at 2316083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * boot time to restore alarms that may have been lost due to a phone 2317083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * reboot. TODO move to provider 23185b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff * 23199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr the ContentResolver 23209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context the Context 23219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param manager the AlarmManager 2322083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 23239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void rescheduleMissedAlarms(ContentResolver cr, 23259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Context context, AlarmManager manager) { 23269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Get all the alerts that have been scheduled but have not fired 23279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // and should have fired by now and are not too old. 23289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long now = System.currentTimeMillis(); 2329cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan long ancient = now - DateUtils.DAY_IN_MILLIS; 23309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] projection = new String[] { 23319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ALARM_TIME, 23329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2333cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 2334cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan // TODO: construct an explicit SQL query so that we can add 2335cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan // "GROUPBY" instead of doing a sort and de-dup 2336083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik Cursor cursor = cr.query(CalendarAlerts.CONTENT_URI, projection, 2337083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik WHERE_RESCHEDULE_MISSED_ALARMS, (new String[] { 2338083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik Long.toString(now), Long.toString(ancient), Long.toString(now) 2339083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik }), SORT_ORDER_ALARMTIME_ASC); 23409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cursor == null) { 23419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 23429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2343cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 2344cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan if (DEBUG) { 2345105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project Log.d(TAG, "missed alarms found: " + cursor.getCount()); 2346105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 23475b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 23489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2349cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan long alarmTime = -1; 2350cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 23519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (cursor.moveToNext()) { 2352cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan long newAlarmTime = cursor.getLong(0); 2353cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan if (alarmTime != newAlarmTime) { 2354cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan if (DEBUG) { 2355cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan Log.w(TAG, "rescheduling missed alarm. alarmTime: " + newAlarmTime); 2356cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan } 2357cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan scheduleAlarm(context, manager, newAlarmTime); 2358cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan alarmTime = newAlarmTime; 2359cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan } 23609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 23629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor.close(); 23639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2364cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan } 2365cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 2366c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2367c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Schedules an alarm intent with the system AlarmManager that will 23683771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * notify listeners when a reminder should be fired. The provider will 23693771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * keep scheduled reminders up to date but apps may use this to 23703771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * implement snooze functionality without modifying the reminders table. 23713771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * Scheduled alarms will generate an intent using 2372083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * {@link #ACTION_EVENT_REMINDER}. TODO Move to provider 2373c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 2374c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param context A context for referencing system resources 2375c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param manager The AlarmManager to use or null 2376c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param alarmTime The time to fire the intent in UTC millis since 2377c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * epoch 2378083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 2379c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 2380cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan public static void scheduleAlarm(Context context, AlarmManager manager, long alarmTime) { 2381cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan if (DEBUG) { 2382cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan Time time = new Time(); 2383cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan time.set(alarmTime); 2384cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan String schedTime = time.format(" %a, %b %d, %Y %I:%M%P"); 2385cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan Log.d(TAG, "Schedule alarm at " + alarmTime + " " + schedTime); 2386cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan } 2387cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 2388cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan if (manager == null) { 2389cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 2390cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan } 23915b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 2392e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik Intent intent = new Intent(ACTION_EVENT_REMINDER); 2393bec6c36b96f7bc415af18abbb142bd51a1741796RoboErik intent.setData(ContentUris.withAppendedId(CalendarContract.CONTENT_URI, alarmTime)); 23941dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio intent.putExtra(ALARM_TIME, alarmTime); 239542f1957817c3bda0c002e2c987f2a8bbe320f755Erik PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); 2396faf96ebc8886a6689d6ab6a9a3209d9b1173b173Tony Mak manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmTime, pi); 23979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23985b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 23999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2400083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * Searches for an entry in the CalendarAlerts table that matches the 2401083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * given event id, begin time and alarm time. If one is found then this 2402083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * alarm already exists and this method returns true. TODO Move to 2403083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * provider 240458644028f909ecb429b26f909bedfb62a153d4e4RoboErik * 24059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr the ContentResolver 24069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventId the event id to match 24079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param begin the start time of the event in UTC millis 24089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param alarmTime the alarm time of the event in UTC millis 2409083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @return true if there is already an alarm for the given event with 2410083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * the same start time and alarm time. 2411083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 24129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final boolean alarmExists(ContentResolver cr, long eventId, 24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long begin, long alarmTime) { 24159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: construct an explicit SQL query so that we can add 24169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // "LIMIT 1" to the end and get just one result. 24171dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio String[] projection = new String[] { ALARM_TIME }; 2418083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik Cursor cursor = cr.query(CONTENT_URI, projection, WHERE_ALARM_EXISTS, 2419083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik (new String[] { 2420083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik Long.toString(eventId), Long.toString(begin), Long.toString(alarmTime) 2421083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik }), null); 24229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean found = false; 24239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 24249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cursor != null && cursor.getCount() > 0) { 24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project found = true; 24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 24289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cursor != null) { 24299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor.close(); 24309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return found; 24339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2436f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik protected interface ColorsColumns extends SyncStateContract.Columns { 2437f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 2438f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 2439f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * The type of color, which describes how it should be used. Valid types 2440f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * are {@link #TYPE_CALENDAR} and {@link #TYPE_EVENT}. Column name. 2441f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * <P> 2442f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * Type: INTEGER (NOT NULL) 2443f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * </P> 2444f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 2445f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik public static final String COLOR_TYPE = "color_type"; 2446f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 2447f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 2448f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * This indicateds a color that can be used for calendars. 2449f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 2450f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik public static final int TYPE_CALENDAR = 0; 2451f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 2452f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * This indicates a color that can be used for events. 2453f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 2454f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik public static final int TYPE_EVENT = 1; 2455f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 2456f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 24574172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * The key used to reference this color. This can be any non-empty 2458f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * string, but must be unique for a given {@link #ACCOUNT_TYPE} and 24598a8eebcbe8e3aded682c9c4937e155218ddf7ff4RoboErik * {@link #ACCOUNT_NAME}. Column name. 2460f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * <P> 2461f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * Type: TEXT 2462f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * </P> 2463f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 24644172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik public static final String COLOR_KEY = "color_index"; 2465f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 2466f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 246705b36e5f3c6618420bda3a0eef818e6838efb0feRoboErik * The color as an 8-bit ARGB integer value. Colors should specify alpha 246805b36e5f3c6618420bda3a0eef818e6838efb0feRoboErik * as fully opaque (eg 0xFF993322) as the alpha may be ignored or 246905b36e5f3c6618420bda3a0eef818e6838efb0feRoboErik * modified for display. It is reccomended that colors be usable with 247005b36e5f3c6618420bda3a0eef818e6838efb0feRoboErik * light (near white) text. Apps should not depend on that assumption, 247105b36e5f3c6618420bda3a0eef818e6838efb0feRoboErik * however. Column name. 2472f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * <P> 2473f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * Type: INTEGER (NOT NULL) 2474f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * </P> 2475f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 247605b36e5f3c6618420bda3a0eef818e6838efb0feRoboErik public static final String COLOR = "color"; 2477f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 2478f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik } 2479f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 2480f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 2481f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * Fields for accessing colors available for a given account. Colors are 24824172d95a6726efd5f03517e1a2a6fbbe879f1d74RoboErik * referenced by {@link #COLOR_KEY} which must be unique for a given 24830c559c6c575e3415788cb08d374df3b4937b99b0RoboErik * account name/type. These values can only be updated by the sync 24848a8eebcbe8e3aded682c9c4937e155218ddf7ff4RoboErik * adapter. Only {@link #COLOR} may be updated after the initial insert. In 24858a8eebcbe8e3aded682c9c4937e155218ddf7ff4RoboErik * addition, a row can only be deleted once all references to that color 24868a8eebcbe8e3aded682c9c4937e155218ddf7ff4RoboErik * have been removed from the {@link Calendars} or {@link Events} tables. 2487f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 2488f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik public static final class Colors implements ColorsColumns { 2489f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 2490f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * @hide 2491f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 2492f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik public static final String TABLE_NAME = "Colors"; 2493f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 2494f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * The Uri for querying color information 2495f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 2496f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik @SuppressWarnings("hiding") 2497f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/colors"); 2498f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 2499f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik /** 2500f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik * This utility class cannot be instantiated 2501f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik */ 2502f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik private Colors() { 2503f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik } 2504f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik } 2505f8143c5d0734b7b9c888c936a0c30df4b5d46021RoboErik 2506b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface ExtendedPropertiesColumns { 25079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2508c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The event the extended property belongs to. Column name. 25099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (foreign key to the Events table)</P> 25109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_ID = "event_id"; 25129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the extended property. This is a uri of the form 2515c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * {scheme}#{local-name} convention. Column name. 25169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 25179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NAME = "name"; 25199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2521c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The value of the extended property. Column name. 25229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 25239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String VALUE = "value"; 25259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2527c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2528c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Fields for accessing the Extended Properties. This is a generic set of 252973bddfcdd3ba50d30aca9df0f394d15bc7932b6aMichael Chan * name/value pairs for use by sync adapters to add extra 25303771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * information to events. There are three writable columns and all three 25313771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * must be present when inserting a new value. They are: 25323771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <ul> 25333771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #EVENT_ID}</li> 25343771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #NAME}</li> 25353771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #VALUE}</li> 25363771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * </ul> 2537c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 25389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class ExtendedProperties implements BaseColumns, 25399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ExtendedPropertiesColumns, EventsColumns { 25409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri CONTENT_URI = 2541a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff Uri.parse("content://" + AUTHORITY + "/extendedproperties"); 25429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25433672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 25443672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 25453672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 25463672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private ExtendedProperties() {} 25473672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 25489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: fill out this class when we actually start utilizing extendedproperties 25499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // in the calendar application. 25509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2551ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff 2552ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff /** 2553ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff * A table provided for sync adapters to use for storing private sync state data. 2554ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff * 2555ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff * @see SyncStateContract 2556ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff */ 2557ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff public static final class SyncState implements SyncStateContract.Columns { 2558ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff /** 2559ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff * This utility class cannot be instantiated 2560ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff */ 2561ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff private SyncState() {} 2562ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff 2563c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String CONTENT_DIRECTORY = 2564ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff SyncStateContract.Constants.CONTENT_DIRECTORY; 2565ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff 2566ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff /** 2567ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff * The content:// style URI for this table 2568ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff */ 2569ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff public static final Uri CONTENT_URI = 2570bec6c36b96f7bc415af18abbb142bd51a1741796RoboErik Uri.withAppendedPath(CalendarContract.CONTENT_URI, CONTENT_DIRECTORY); 2571ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff } 2572505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2573505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2574505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * Columns from the EventsRawTimes table 25753771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * 25763771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * @hide 2577505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2578b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface EventsRawTimesColumns { 2579505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2580c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The corresponding event id. Column name. 2581505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * <P>Type: INTEGER (long)</P> 2582505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2583505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final String EVENT_ID = "event_id"; 2584505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2585505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2586c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The RFC2445 compliant time the event starts. Column name. 2587505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * <P>Type: TEXT</P> 2588505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2589505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final String DTSTART_2445 = "dtstart2445"; 2590505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2591505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2592c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The RFC2445 compliant time the event ends. Column name. 2593505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * <P>Type: TEXT</P> 2594505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2595505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final String DTEND_2445 = "dtend2445"; 2596505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2597505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2598c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The RFC2445 compliant original instance time of the recurring event 2599c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * for which this event is an exception. Column name. 2600505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * <P>Type: TEXT</P> 2601505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2602505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final String ORIGINAL_INSTANCE_TIME_2445 = "originalInstanceTime2445"; 2603505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2604505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2605c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The RFC2445 compliant last date this event repeats on, or NULL if it 2606c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * never ends. Column name. 2607505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * <P>Type: TEXT</P> 2608505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2609505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final String LAST_DATE_2445 = "lastDate2445"; 2610505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio } 2611505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2612c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2613c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @hide 2614c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 2615505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final class EventsRawTimes implements BaseColumns, EventsRawTimesColumns { 26163672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 26173672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 26183672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 26193672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 26203672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private EventsRawTimes() {} 2621505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio } 26229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2623