CalendarContract.java revision e5e0250dd23d0ff718a26350f3076884235b8c0e
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; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.AlarmManager; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.PendingIntent; 2464a556d755d27b1182897e9243cf4f3016e76a88Marc Blankimport android.content.ContentProviderClient; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentUris; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 29328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintanaimport android.content.CursorEntityIterator; 30328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintanaimport android.content.Entity; 3164a556d755d27b1182897e9243cf4f3016e76a88Marc Blankimport android.content.EntityIterator; 3264a556d755d27b1182897e9243cf4f3016e76a88Marc Blankimport android.content.Intent; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 34328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintanaimport android.database.DatabaseUtils; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 36cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chanimport android.os.RemoteException; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.format.DateUtils; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.format.Time; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 42260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <p> 43260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * The contract between the calendar provider and applications. Contains 44260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * definitions for the supported URIs and data columns. 45260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * </p> 46260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <h3>Overview</h3> 47260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <p> 48260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * CalendarContract defines the data model of calendar and event related 49260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * information. This data is stored in a number of tables: 50260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * </p> 51260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <ul> 52260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li>The {@link Calendars} table holds the calendar specific information. Each 53260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * row in this table contains the details for a single calendar, such as the 54260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * name, color, sync info, etc.</li> 55260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li>The {@link Events} table holds the event specific information. Each row 56260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * in this table has the info for a single event. It contains information such 57260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * as event title, location, start time, end time, etc. The event can occur 58260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * one-time or can recur multiple times. Attendees, reminders, and extended 59260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * properties are stored on separate tables and reference the {@link Events#_ID} 60260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * to link them with the event.</li> 61260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li>The {@link Instances} table holds the start and end time for occurrences 62260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * of an event. Each row in this table represents a single occurrence. For 63260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * one-time events there will be a 1:1 mapping of instances to events. For 64260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * recurring events, multiple rows will automatically be generated which 65260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * correspond to multiple occurrences of that event.</li> 66260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li>The {@link Attendees} table holds the event attendee or guest 67260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * information. Each row represents a single guest of an event. It specifies the 68260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * type of guest they are and their attendance response for the event.</li> 69260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li>The {@link Reminders} table holds the alert/notification data. Each row 70260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * represents a single alert for an event. An event can have multiple reminders. 71260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * The number of reminders per event is specified in 72260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * {@link Calendars#MAX_REMINDERS} which is set by the Sync Adapter that owns 73260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * the given calendar. Reminders are specified in minutes before the event and 74260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * have a type.</li> 75260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li>The {@link ExtendedProperties} table hold opaque data fields used by the 76260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * sync adapter. The provider takes no action with items in this table except to 77260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * delete them when their related events are deleted.</li> 78260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * </ul> 79260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <p> 80260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * Other tables include: 81260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * </p> 82260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <ul> 83260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * <li> 84260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * {@link SyncState}, which contains free-form data maintained by the sync 85260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * adapters</li> 86260598d0cfb1f4f31fe698b6ceaeb0f4d2009e61RoboErik * </ul> 87bec6c36b96f7bc415af18abbb142bd51a1741796RoboErik * 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 89bec6c36b96f7bc415af18abbb142bd51a1741796RoboErikpublic final class CalendarContract { 90c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String TAG = "Calendar"; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 93c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Broadcast Action: This is the intent that gets fired when an alarm 94c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * notification needs to be posted for a reminder. 95083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 973672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 98e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik public static final String ACTION_EVENT_REMINDER = "android.intent.action.EVENT_REMINDER"; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 101c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Intent Extras key: The start time of an event or an instance of a 102c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * recurring event. (milliseconds since epoch) 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 104e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik public static final String EXTRA_EVENT_BEGIN_TIME = "beginTime"; 105c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik 106c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 107c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Intent Extras key: The end time of an event or an instance of a recurring 108c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * event. (milliseconds since epoch) 109c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 110e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik public static final String EXTRA_EVENT_END_TIME = "endTime"; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 112e9b734dff148d8e70a9604c81d162144becdc45dErik /** 1137420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan * Intent Extras key: When creating an event, set this to true to create an 1147420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan * all-day event by default 1157420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan */ 1167420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan public static final String EXTRA_EVENT_ALL_DAY = "allDay"; 1177420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan 1187420f1339446cd76723d57b3c5c1bbc92f15f4f0Michael Chan /** 119c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * This authority is used for writing to or querying from the calendar 120c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * provider. Note: This is set at first run and cannot be changed without 121c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * breaking apps that access the provider. 122e9b734dff148d8e70a9604c81d162144becdc45dErik */ 1231790c13ed68a3fc1f8d91d636caae422a19b1a2aKen Shirriff public static final String AUTHORITY = "com.android.calendar"; 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content:// style URL for the top-level calendar authority 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 128083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1315b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff * An optional insert, update or delete URI parameter that allows the caller 132c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * to specify that it is a sync adapter. The default value is false. If set 133c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * to true, the modified row is not marked as "dirty" (needs to be synced) 134c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * and when the provider calls 135c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * {@link ContentResolver#notifyChange(android.net.Uri, android.database.ContentObserver, boolean)} 136c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * , the third parameter "syncToNetwork" is set to false. Furthermore, if 137c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * set to true, the caller must also include 1386f5b4550450d98bb2ae4ac93cefd4133e2a71847Andy McFadden * {@link Calendars#ACCOUNT_NAME} and {@link Calendars#ACCOUNT_TYPE} as 139c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * query parameters. 140c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1416f5b4550450d98bb2ae4ac93cefd4133e2a71847Andy McFadden * @see Uri.Builder#appendQueryParameter(java.lang.String, java.lang.String) 1425b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff */ 1435b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff public static final String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter"; 1445b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 145c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 146c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * A special account type for calendars not associated with any account. 147c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Normally calendars that do not match an account on the device will be 148c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * removed. Setting the account_type on a calendar to this will prevent it 149c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * from being wiped if it does not match an existing account. 150c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 151c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @see SyncColumns#ACCOUNT_TYPE 152c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 153c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik public static final String ACCOUNT_TYPE_LOCAL = "LOCAL"; 154c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 1555b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff /** 1563672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 1573672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 1583672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private CalendarContract() {} 1593672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 1603672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 161c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Generic columns for use by sync adapters. The specific functions of these 162c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * columns are private to the sync adapter. Other clients of the API should 163c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * not attempt to either read or write this column. These columns are 164c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * editable as part of the Calendars Uri, but can only be read if accessed 165c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * through any other Uri. 16636f7784a4cb45845ed7725c0cc6d7022682f00b3Fabrice Di Meglio */ 167c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik protected interface CalendarSyncColumns { 16836f7784a4cb45845ed7725c0cc6d7022682f00b3Fabrice Di Meglio 1699734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 1709734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 1719734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 1729734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 1739734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 174be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC1 = "cal_sync1"; 1759734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 1769734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 1779734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 1789734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 1799734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 180be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC2 = "cal_sync2"; 1819734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 1829734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 1839734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 1849734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 1859734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 186be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC3 = "cal_sync3"; 1879734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 1889734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 1899734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 1909734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 1919734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 192be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC4 = "cal_sync4"; 1939734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 1949734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 1959734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 1969734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 1979734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 198be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC5 = "cal_sync5"; 1999734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2009734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2019734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2029734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2039734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 204be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik public static final String CAL_SYNC6 = "cal_sync6"; 2059734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2069734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2079734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2089734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2099734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 2109734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAL_SYNC7 = "cal_sync7"; 2119734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2129734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2139734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2149734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2159734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 2169734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAL_SYNC8 = "cal_sync8"; 2179734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2189734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2199734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2209734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2219734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 2229734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAL_SYNC9 = "cal_sync9"; 2239734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 2249734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 2259734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Generic column for use by sync adapters. Column name. 2269734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 2279734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 2289734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAL_SYNC10 = "cal_sync10"; 22936f7784a4cb45845ed7725c0cc6d7022682f00b3Fabrice Di Meglio } 23036f7784a4cb45845ed7725c0cc6d7022682f00b3Fabrice Di Meglio 23136f7784a4cb45845ed7725c0cc6d7022682f00b3Fabrice Di Meglio /** 232c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Columns for Sync information used by Calendars and Events tables. These 233c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * have specific uses which are expected to be consistent by the app and 234c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * sync adapter. 235c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2370025860b61c1b9e8e7d1da7edd7a8ad837b87078RoboErik protected interface SyncColumns extends CalendarSyncColumns { 238328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 239c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The account that was used to sync the entry to the device. If the 240c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * account_type is not {@link #ACCOUNT_TYPE_LOCAL} then the name and 241c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * type must match an account on the device or the calendar will be 242c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * deleted. 243328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana * <P>Type: TEXT</P> 244328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 245651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String ACCOUNT_NAME = "account_name"; 246328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 247328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 248c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The type of the account that was used to sync the entry to the 249c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * device. A type of {@link #ACCOUNT_TYPE_LOCAL} will keep this event 250c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * form being deleted if there are no matching accounts on the device. 251328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana * <P>Type: TEXT</P> 252328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 253651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String ACCOUNT_TYPE = "account_type"; 254328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 255328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 256c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The unique ID for a row assigned by the sync source. NULL if the row 257c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * has never been synced. This is used as a reference id for exceptions 258c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * along with {@link BaseColumns#_ID}. 259328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana * <P>Type: TEXT</P> 260328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 261328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public static final String _SYNC_ID = "_sync_id"; 262328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 263328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 2649734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Used to indicate that local, unsynced, changes are present. 265328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana * <P>Type: INTEGER (long)</P> 266328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 2679734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String DIRTY = "dirty"; 268328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 269328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 2709734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Whether the row has been deleted but not synced to the server. A 2719734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * deleted row should be ignored. 2729734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P> 2739734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Type: INTEGER (boolean) 2749734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * </P> 275328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 2769734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String DELETED = "deleted"; 27715049e46f7331b64bd3093e1d9a0365ca5caf3aeKen Shirriff 278866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert /** 279866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * If set to 1 this causes events on this calendar to be duplicated with 2800025860b61c1b9e8e7d1da7edd7a8ad837b87078RoboErik * {@link Events#LAST_SYNCED} set to 1 whenever the event 2819734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * transitions from non-dirty to dirty. The duplicated event will not be 2829734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * expanded in the instances table and will only show up in sync adapter 2839734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * queries of the events table. It will also be deleted when the 284866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * originating event has its dirty flag cleared by the sync adapter. 285866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * <P>Type: INTEGER (boolean)</P> 286866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert */ 287866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert public static final String CAN_PARTIALLY_UPDATE = "canPartiallyUpdate"; 288c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 289c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 290c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 291c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Columns specific to the Calendars Uri that other Uris can query. 292c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 293e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik protected interface CalendarColumns { 294c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 295c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * The color of the calendar 296c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <P>Type: INTEGER (color value)</P> 297c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 298651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String CALENDAR_COLOR = "calendar_color"; 299c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 300c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 3019734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * The display name of the calendar. Column name. 3029734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 3039734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 3049734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CALENDAR_DISPLAY_NAME = "calendar_displayName"; 3059734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 3069734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 307c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * The level of access that the user has for the calendar 308c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <P>Type: INTEGER (one of the values below)</P> 309c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 3109734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CALENDAR_ACCESS_LEVEL = "calendar_access_level"; 311c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 312c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** Cannot access the calendar */ 3139734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_NONE = 0; 314c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** Can only see free/busy information about the calendar */ 3159734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_FREEBUSY = 100; 316c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** Can read all event details */ 3179734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_READ = 200; 318c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** Can reply yes/no/maybe to an event */ 3199734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_RESPOND = 300; 320c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** not used */ 3219734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_OVERRIDE = 400; 322c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** Full access to modify the calendar, but not the access control 323c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * settings 324c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 3259734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_CONTRIBUTOR = 500; 326c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** Full access to modify the calendar, but not the access control 327c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * settings 328c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 3299734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_EDITOR = 600; 330c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** Full access to the calendar */ 3319734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_OWNER = 700; 332c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** Domain admin */ 3339734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final int CAL_ACCESS_ROOT = 800; 334c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 335c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 336c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * Is the calendar selected to be displayed? 337c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 0 - do not show events associated with this calendar. 338c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1 - show events associated with this calendar 339c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <P>Type: INTEGER (boolean)</P> 340c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 341df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden public static final String VISIBLE = "visible"; 342c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 343c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 344c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The time zone the calendar is associated with. 345c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <P>Type: TEXT</P> 346c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 3479734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CALENDAR_TIME_ZONE = "calendar_timezone"; 348c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 349c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 350c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Is this calendar synced and are its events stored on the device? 351c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 0 - Do not sync this calendar or store events for this calendar. 352c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1 - Sync down events for this calendar. 353c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <p>Type: INTEGER (boolean)</p> 354c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 355c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio public static final String SYNC_EVENTS = "sync_events"; 356c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 357c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 3589734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * The owner account for this calendar, based on the calendar feed. 3599734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This will be different from the _SYNC_ACCOUNT for delegated calendars. 3609734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Column name. 3619734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: String</P> 362c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 3639734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String OWNER_ACCOUNT = "ownerAccount"; 364c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 365c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 3669734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Can the organizer respond to the event? If no, the status of the 3679734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * organizer should not be shown by the UI. Defaults to 1. Column name. 368c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * <P>Type: INTEGER (boolean)</P> 369c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 3709734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAN_ORGANIZER_RESPOND = "canOrganizerRespond"; 3719734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 3729734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 3739734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * Can the organizer modify the time zone of the event? Column name. 3749734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: INTEGER (boolean)</P> 3759734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 3769734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String CAN_MODIFY_TIME_ZONE = "canModifyTimeZone"; 3779734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 3789734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 3799734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * The maximum number of reminders allowed for an event. Column name. 3809734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: INTEGER</P> 3819734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 3829734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String MAX_REMINDERS = "maxReminders"; 3839734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 3849734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 3859734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * A comma separated list of reminder methods supported for this 3869734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * calendar in the format "#,#,#". Valid types are 3879734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * {@link Reminders#METHOD_DEFAULT}, {@link Reminders#METHOD_ALERT}, 3889734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * {@link Reminders#METHOD_EMAIL}, {@link Reminders#METHOD_SMS}. Column 3899734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * name. 3909734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 3919734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 3929734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String ALLOWED_REMINDERS = "allowedReminders"; 393c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 394c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 395c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 396c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * Class that represents a Calendar Entity. There is one entry per calendar. 397c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * This is a helper class to make batch operations easier. 398c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 3993672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik public static final class CalendarEntity implements BaseColumns, SyncColumns, CalendarColumns { 400c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 401c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 402c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The default Uri used when creating a new calendar EntityIterator. 403c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 404c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 405c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + 406c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio "/calendar_entities"); 407c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 408c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 4093672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 4103672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 4113672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private CalendarEntity() {} 4123672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 4133672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 414c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Creates an entity iterator for the given cursor. It assumes the 415c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * cursor contains a calendars query. 416c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 417c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cursor query on {@link #CONTENT_URI} 418c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return an EntityIterator of calendars 419c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 420c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik public static EntityIterator newEntityIterator(Cursor cursor) { 421c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik return new EntityIteratorImpl(cursor); 422c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 423c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 424c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio private static class EntityIteratorImpl extends CursorEntityIterator { 425c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 426c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik public EntityIteratorImpl(Cursor cursor) { 427c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio super(cursor); 428c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 429c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 430c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio @Override 431c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio public Entity getEntityAndIncrementCursor(Cursor cursor) throws RemoteException { 432c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio // we expect the cursor is already at the row we need to read from 433c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio final long calendarId = cursor.getLong(cursor.getColumnIndexOrThrow(_ID)); 434c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 435c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio // Create the content value 436c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio ContentValues cv = new ContentValues(); 437c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio cv.put(_ID, calendarId); 438c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 439651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ACCOUNT_NAME); 440651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ACCOUNT_TYPE); 441c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 442c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, _SYNC_ID); 443651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DIRTY); 444c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 4459734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC1); 4469734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC2); 4479734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC3); 4489734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC4); 4499734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC5); 4509734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC6); 4519734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC7); 4529734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC8); 4539734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC9); 4549734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC10); 455c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 456c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.NAME); 457c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, 4589734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik Calendars.CALENDAR_DISPLAY_NAME); 459866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 460866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert Calendars.CALENDAR_COLOR); 4619734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, CALENDAR_ACCESS_LEVEL); 462df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, VISIBLE); 463c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, SYNC_EVENTS); 464651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, 465651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik Calendars.CALENDAR_LOCATION); 4669734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CALENDAR_TIME_ZONE); 467c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, 468c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio Calendars.OWNER_ACCOUNT); 469c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 470df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden Calendars.CAN_ORGANIZER_RESPOND); 471df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 472df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden Calendars.CAN_MODIFY_TIME_ZONE); 473df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 474df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden Calendars.MAX_REMINDERS); 475866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 476866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert Calendars.CAN_PARTIALLY_UPDATE); 4779734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, 4789734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik Calendars.ALLOWED_REMINDERS); 479c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 480c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, DELETED); 481c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 482c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio // Create the Entity from the ContentValue 483c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio Entity entity = new Entity(cv); 484c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 485c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio // Set cursor to next row 486c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio cursor.moveToNext(); 487c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 488c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio // Return the created Entity 489c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio return entity; 490c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 491c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 492c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio } 493c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio 494c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 495f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * Constants and helpers for the Calendars table, which contains details for 496f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * individual calendars. <h3>Operations</h3> All operations can be done 497f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * either as an app or as a sync adapter. To perform an operation as a sync 498f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * adapter {@link #CALLER_IS_SYNCADAPTER} should be set to true and 499f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link #ACCOUNT_NAME} and {@link #ACCOUNT_TYPE} must be set in the Uri 500f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * parameters. See 501f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link Uri.Builder#appendQueryParameter(java.lang.String, java.lang.String)} 502f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * for details on adding parameters. Sync adapters have write access to more 503f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * columns but are restricted to a single account at a time. Calendars are 504f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * designed to be primarily managed by a sync adapter and inserting new 505f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * calendars should be done as a sync adapter. For the most part, apps 506f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * should only update calendars (such as changing the color or display 507f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * name). If a local calendar is required an app can do so by inserting as a 508f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * sync adapter and using an {@link #ACCOUNT_TYPE} of 509f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link #ACCOUNT_TYPE_LOCAL} . 510f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dl> 511f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dt><b>Insert</b></dt> 512f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dd>When inserting a new calendar the following fields must be included: 513f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <ul> 514f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ACCOUNT_NAME}</li> 515f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ACCOUNT_TYPE}</li> 516f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #NAME}</li> 517f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_DISPLAY_NAME}</li> 518f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_COLOR}</li> 519f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_ACCESS_LEVEL}</li> 520f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #OWNER_ACCOUNT}</li> 521f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * </ul> 522f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * The following fields are not required when inserting a Calendar but are 523f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * generally a good idea to include: 524f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <ul> 525f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #SYNC_EVENTS} set to 1</li> 526f92ccfb8b0e2062e5170ea649cdc01692b09a683RoboErik * <li>{@link #CALENDAR_TIME_ZONE}</li> 527f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ALLOWED_REMINDERS}</li> 528f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * </ul> 529f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dt><b>Update</b></dt> 530f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dd>To perform an update on a calendar the {@link #_ID} of the calendar 531f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * should be provided either as an appended id to the Uri ( 532f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link ContentUris#withAppendedId}) or as the first selection item--the 533f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * selection should start with "_id=?" and the first selectionArg should be 534f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * the _id of the calendar. Calendars may also be updated using a selection 535f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * without the id. In general, the {@link #ACCOUNT_NAME} and 536f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link #ACCOUNT_TYPE} should not be changed after a calendar is created 537f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * as this can cause issues for sync adapters. 538f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dt><b>Delete</b></dt> 539f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dd>Calendars can be deleted either by the {@link #_ID} as an appended id 540f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * on the Uri or using any standard selection. Deleting a calendar should 541f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * generally be handled by a sync adapter as it will remove the calendar 542f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * from the database and all associated data (aka events).</dd> 543f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dt><b>Query</b></dt> 544f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dd>Querying the Calendars table will get you all information about a set 545f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * of calendars. There will be one row returned for each calendar that 546f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * matches the query selection, or at most a single row if the {@link #_ID} 547f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * is appended to the Uri.</dd> 548f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * </dl> 549f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <h3>Calendar Columns</h3> The following Calendar columns are writable by 550f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * both an app and a sync adapter. 551f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <ul> 552f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #NAME}</li> 553f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_DISPLAY_NAME}</li> 554f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_COLOR}</li> 555f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #VISIBLE}</li> 556f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #SYNC_EVENTS}</li> 557f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * </ul> 558f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * The following Calendars columns are writable only by a sync adapter 559f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <ul> 560f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ACCOUNT_NAME}</li> 561f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ACCOUNT_TYPE}</li> 562f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #_SYNC_ID}</li> 563f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #DIRTY}</li> 564f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #OWNER_ACCOUNT}</li> 565f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #MAX_REMINDERS}</li> 566f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #ALLOWED_REMINDERS}</li> 567f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAN_MODIFY_TIME_ZONE}</li> 568f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAN_ORGANIZER_RESPOND}</li> 569f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAN_PARTIALLY_UPDATE}</li> 570f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_LOCATION}</li> 571f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_TIME_ZONE}</li> 572f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CALENDAR_ACCESS_LEVEL}</li> 573f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #DELETED}</li> 574f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC1}</li> 575f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC2}</li> 576f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC3}</li> 577f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC4}</li> 578f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC5}</li> 579f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC6}</li> 580f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC7}</li> 581f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC8}</li> 582f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC9}</li> 583f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <li>{@link #CAL_SYNC10}</li> 584f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * </ul> 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5863672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik public static final class Calendars implements BaseColumns, SyncColumns, CalendarColumns { 5873672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 5883672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 5893672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 5903672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 5913672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private Calendars() {} 5923672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 594c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for accessing Calendars 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 596c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 5971dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/calendars"); 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 602e5e0250dd23d0ff718a26350f3076884235b8c0eMichael Chan public static final String DEFAULT_SORT_ORDER = CALENDAR_DISPLAY_NAME; 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 605c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The name of the calendar. Column name. 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NAME = "name"; 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 611c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The default location for the calendar. Column name. 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 614651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String CALENDAR_LOCATION = "calendar_location"; 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6176efb30f40a19a9639076b08df4f64d335c8946a0RoboErik * These fields are only writable by a sync adapter. To modify them the 618c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * caller must include {@link #CALLER_IS_SYNCADAPTER}, 6199734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * {@link #ACCOUNT_NAME}, and {@link #ACCOUNT_TYPE} in the Uri's query 620083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * parameters. TODO move to provider 621083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * 622083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 6236efb30f40a19a9639076b08df4f64d335c8946a0RoboErik */ 6246efb30f40a19a9639076b08df4f64d335c8946a0RoboErik public static final String[] SYNC_WRITABLE_COLUMNS = new String[] { 625651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik ACCOUNT_NAME, 626651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik ACCOUNT_TYPE, 6276efb30f40a19a9639076b08df4f64d335c8946a0RoboErik _SYNC_ID, 628651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DIRTY, 6296efb30f40a19a9639076b08df4f64d335c8946a0RoboErik OWNER_ACCOUNT, 6306efb30f40a19a9639076b08df4f64d335c8946a0RoboErik MAX_REMINDERS, 631f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik ALLOWED_REMINDERS, 6326efb30f40a19a9639076b08df4f64d335c8946a0RoboErik CAN_MODIFY_TIME_ZONE, 6336efb30f40a19a9639076b08df4f64d335c8946a0RoboErik CAN_ORGANIZER_RESPOND, 634866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert CAN_PARTIALLY_UPDATE, 635651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik CALENDAR_LOCATION, 6369734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_TIME_ZONE, 6379734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_ACCESS_LEVEL, 6386efb30f40a19a9639076b08df4f64d335c8946a0RoboErik DELETED, 639be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik CAL_SYNC1, 640be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik CAL_SYNC2, 641be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik CAL_SYNC3, 642be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik CAL_SYNC4, 643c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC5, 644c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC6, 6459734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC7, 6469734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC8, 6479734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC9, 6489734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC10, 6496efb30f40a19a9639076b08df4f64d335c8946a0RoboErik }; 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 652c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio /** 653c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio * Columns from the Attendees table that other tables join into themselves. 654c3cc13306c69e4f354b7b230698eaa0b90bba454Fabrice Di Meglio */ 655b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface AttendeesColumns { 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 658c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The id of the event. Column name. 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_ID = "event_id"; 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 664c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The name of the attendee. Column name. 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: STRING</P> 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ATTENDEE_NAME = "attendeeName"; 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 670c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The email address of the attendee. Column name. 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: STRING</P> 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ATTENDEE_EMAIL = "attendeeEmail"; 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 676c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The relationship of the attendee to the user. Column name. 677c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER (one of {@link #RELATIONSHIP_ATTENDEE}, ...}.</P> 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ATTENDEE_RELATIONSHIP = "attendeeRelationship"; 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RELATIONSHIP_NONE = 0; 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RELATIONSHIP_ATTENDEE = 1; 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RELATIONSHIP_ORGANIZER = 2; 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RELATIONSHIP_PERFORMER = 3; 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RELATIONSHIP_SPEAKER = 4; 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 688c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The type of attendee. Column name. 689c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: Integer (one of {@link #TYPE_REQUIRED}, {@link #TYPE_OPTIONAL})</P> 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ATTENDEE_TYPE = "attendeeType"; 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_NONE = 0; 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_REQUIRED = 1; 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE_OPTIONAL = 2; 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 698c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The attendance status of the attendee. Column name. 699c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: Integer (one of {@link #ATTENDEE_STATUS_ACCEPTED}, ...).</P> 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ATTENDEE_STATUS = "attendeeStatus"; 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ATTENDEE_STATUS_NONE = 0; 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ATTENDEE_STATUS_ACCEPTED = 1; 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ATTENDEE_STATUS_DECLINED = 2; 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ATTENDEE_STATUS_INVITED = 3; 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ATTENDEE_STATUS_TENTATIVE = 4; 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 710c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 7113771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * Fields and helpers for interacting with Attendees. Each row of this table 7123771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * represents a single attendee or guest of an event. Calling 71358644028f909ecb429b26f909bedfb62a153d4e4RoboErik * {@link #query(ContentResolver, long, String[])} will return a list of attendees for 7143771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * the event with the given eventId. Both apps and sync adapters may write 7153771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * to this table. There are six writable fields and all of them except 7163771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * {@link #ATTENDEE_NAME} must be included when inserting a new attendee. 7173771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * They are: 7183771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <ul> 7193771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #EVENT_ID}</li> 7203771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #ATTENDEE_NAME}</li> 7213771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #ATTENDEE_EMAIL}</li> 7223771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #ATTENDEE_RELATIONSHIP}</li> 7233771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #ATTENDEE_TYPE}</li> 7243771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #ATTENDEE_STATUS}</li> 7253771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * </ul> 726c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 7271dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio public static final class Attendees implements BaseColumns, AttendeesColumns, EventsColumns { 728c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik 729c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 730c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for accessing Attendees data 731c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 732c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 7331dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/attendees"); 734c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String ATTENDEES_WHERE = Attendees.EVENT_ID + "=?"; 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 736c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 7373672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 7383672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 7393672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private Attendees() {} 7403672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 7413672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 742c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Queries all attendees associated with the given event. This is a 743c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * blocking call and should not be done on the UI thread. 7443672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * 745c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cr The content resolver to use for the query 746c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param eventId The id of the event to retrieve attendees for 74758644028f909ecb429b26f909bedfb62a153d4e4RoboErik * @param projection the columns to return in the cursor 748c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return A Cursor containing all attendees for the event 749c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 75058644028f909ecb429b26f909bedfb62a153d4e4RoboErik public static final Cursor query(ContentResolver cr, long eventId, String[] projection) { 751c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik String[] attArgs = {Long.toString(eventId)}; 75258644028f909ecb429b26f909bedfb62a153d4e4RoboErik return cr.query(CONTENT_URI, projection, ATTENDEES_WHERE, attArgs /* selection args */, 753c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik null /* sort order */); 754c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik } 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Columns from the Events table that other tables join into themselves. 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 760b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface EventsColumns { 761df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden 762df2e2c89d82219eb630091c1329fd2bd8c04ec22Andy McFadden /** 763c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The {@link Calendars#_ID} of the calendar the event belongs to. 764c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Column name. 765c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER</P> 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CALENDAR_ID = "calendar_id"; 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 770c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The title of the event. Column name. 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String TITLE = "title"; 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 776c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The description of the event. Column name. 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DESCRIPTION = "description"; 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 782c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Where the event takes place. Column name. 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_LOCATION = "eventLocation"; 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7889734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * A secondary color for the individual event. Column name. 7899734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: INTEGER</P> 7909734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 7919734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String EVENT_COLOR = "eventColor"; 7929734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 7939734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 794c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The event status. Column name. 795c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER (one of {@link #STATUS_TENTATIVE}...)</P> 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String STATUS = "eventStatus"; 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATUS_TENTATIVE = 0; 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATUS_CONFIRMED = 1; 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATUS_CANCELED = 2; 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a copy of the attendee status for the owner of this event. 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This field is copied here so that we can efficiently filter out 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events that are declined without having to look in the Attendees 807c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * table. Column name. 8085b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff * 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String SELF_ATTENDEE_STATUS = "selfAttendeeStatus"; 8125b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 814c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * This column is available for use by sync adapters. Column name. 81564a556d755d27b1182897e9243cf4f3016e76a88Marc Blank * <P>Type: TEXT</P> 81664a556d755d27b1182897e9243cf4f3016e76a88Marc Blank */ 817651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String SYNC_DATA1 = "sync_data1"; 81864a556d755d27b1182897e9243cf4f3016e76a88Marc Blank 81964a556d755d27b1182897e9243cf4f3016e76a88Marc Blank /** 8209734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 8219734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 8229734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 8239734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA2 = "sync_data2"; 8249734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 8259734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 8269734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 8279734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 8289734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 8299734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA3 = "sync_data3"; 8309734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 8319734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 8329734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 8339734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 8349734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 8359734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA4 = "sync_data4"; 8369734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 8379734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 8389734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 8399734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 8409734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 8419734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA5 = "sync_data5"; 8429734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 8439734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 8449734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 8459734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 8469734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 8479734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA6 = "sync_data6"; 8489734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 8499734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 8509734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 851866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * <P>Type: TEXT</P> 852866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert */ 853866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert public static final String SYNC_DATA7 = "sync_data7"; 854866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert 855866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert /** 8569734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 8579734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 8589734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 8599734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA8 = "sync_data8"; 8609734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 8619734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 8629734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 8639734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 8649734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 8659734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA9 = "sync_data9"; 8669734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 8679734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 8689734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * This column is available for use by sync adapters. Column name. 8699734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik * <P>Type: TEXT</P> 8709734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik */ 8719734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final String SYNC_DATA10 = "sync_data10"; 8729734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik 8739734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik /** 874866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * Used to indicate that a row is not a real event but an original copy of a locally 875866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * modified event. A copy is made when an event changes from non-dirty to dirty and the 876866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * event is on a calendar with {@link Calendars#CAN_PARTIALLY_UPDATE} set to 1. This copy 877866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * does not get expanded in the instances table and is only visible in queries made by a 878866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * sync adapter. The copy gets removed when the event is changed back to non-dirty by a 879866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * sync adapter. 880866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert * <P>Type: INTEGER (boolean)</P> 881866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert */ 882866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert public static final String LAST_SYNCED = "lastSynced"; 883866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert 884866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert /** 885c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The time the event starts in UTC millis since epoch. Column name. 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DTSTART = "dtstart"; 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 891c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The time the event ends in UTC millis since epoch. Column name. 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DTEND = "dtend"; 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 897c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The duration of the event in RFC2445 format. Column name. 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT (duration in RFC2445 format)</P> 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DURATION = "duration"; 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 903c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The timezone for the event. Column name. 904c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: TEXT</P> 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_TIMEZONE = "eventTimezone"; 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 909c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The timezone for the end time of the event. Column name. 910c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: TEXT</P> 911c07b06f12ac1f93b35f3e120a5e7d6aa5f934c6fErik */ 912651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String EVENT_END_TIMEZONE = "eventEndTimezone"; 913c07b06f12ac1f93b35f3e120a5e7d6aa5f934c6fErik 914c07b06f12ac1f93b35f3e120a5e7d6aa5f934c6fErik /** 915c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Is the event all day (time zone independent). Column name. 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALL_DAY = "allDay"; 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 921651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * Defines how the event shows up for others when the calendar is 922c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * shared. Column name. 923c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER (One of {@link #ACCESS_DEFAULT}, ...)</P> 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 925651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String ACCESS_LEVEL = "accessLevel"; 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 927651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 928651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * Default access is controlled by the server and will be treated as 929651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * public on the device. 930651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 931651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int ACCESS_DEFAULT = 0; 932651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 933651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * Confidential is not used by the app. 934651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 935651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int ACCESS_CONFIDENTIAL = 1; 936651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 937c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Private shares the event as a free/busy slot with no details. 938651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 939651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int ACCESS_PRIVATE = 2; 940651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 941c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Public makes the contents visible to anyone with access to the 942651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * calendar. 943651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 944651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int ACCESS_PUBLIC = 3; 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 947651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * If this event counts as busy time or is still free time that can be 948c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * scheduled over. Column name. 949c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER (One of {@link #AVAILABILITY_BUSY}, 950c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * {@link #AVAILABILITY_FREE})</P> 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 952651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String AVAILABILITY = "availability"; 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 954651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 955651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * Indicates that this event takes up time and will conflict with other 956651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * events. 957651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 958651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int AVAILABILITY_BUSY = 0; 959651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 960651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * Indicates that this event is free time and will not conflict with 961651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * other events. 962651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 963651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final int AVAILABILITY_FREE = 1; 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 966c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether the event has an alarm or not. Column name. 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String HAS_ALARM = "hasAlarm"; 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 972c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether the event has extended properties or not. Column name. 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String HAS_EXTENDED_PROPERTIES = "hasExtendedProperties"; 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 978c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The recurrence rule for the event. Column name. 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String RRULE = "rrule"; 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 984c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The recurrence dates for the event. Column name. 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String RDATE = "rdate"; 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 990c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The recurrence exception rule for the event. Column name. 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXRULE = "exrule"; 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 996c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The recurrence exception dates for the event. Column name. 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EXDATE = "exdate"; 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1002c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The {@link Events#_ID} of the original recurring event for which this 1003c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * event is an exception. Column name. 1004c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik * <P>Type: TEXT</P> 1005c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik */ 1006c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik public static final String ORIGINAL_ID = "original_id"; 1007c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik 1008c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik /** 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The _sync_id of the original recurring event for which this event is 1010c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik * an exception. The provider should keep the original_id in sync when 1011c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * this is updated. Column name. 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1014651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String ORIGINAL_SYNC_ID = "original_sync_id"; 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The original instance time of the recurring event for which this 1018c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * event is an exception. Column name. 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ORIGINAL_INSTANCE_TIME = "originalInstanceTime"; 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The allDay status (true or false) of the original recurring event 1025c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * for which this event is an exception. Column name. 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (boolean)</P> 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ORIGINAL_ALL_DAY = "originalAllDay"; 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1031c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The last date this event repeats on, or NULL if it never ends. Column 1032c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * name. 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String LAST_DATE = "lastDate"; 103679f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff 103779f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff /** 103879f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff * Whether the event has attendee information. True if the event 103979f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff * has full attendee data, false if the event has information about 1040c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * self only. Column name. 104179f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff * <P>Type: INTEGER (boolean)</P> 104279f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff */ 104379f0c56b63bd73585cebf6930c3783c140c6e465Ken Shirriff public static final String HAS_ATTENDEE_DATA = "hasAttendeeData"; 10443d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff 10453d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff /** 1046c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether guests can modify the event. Column name. 10473d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff * <P>Type: INTEGER (boolean)</P> 10483d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff */ 10493d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff public static final String GUESTS_CAN_MODIFY = "guestsCanModify"; 10503d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff 10513d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff /** 1052c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether guests can invite other guests. Column name. 10533d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff * <P>Type: INTEGER (boolean)</P> 10543d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff */ 10553d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff public static final String GUESTS_CAN_INVITE_OTHERS = "guestsCanInviteOthers"; 10563d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff 10573d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff /** 1058c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether guests can see the list of attendees. Column name. 10593d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff * <P>Type: INTEGER (boolean)</P> 10603d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff */ 10613d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff public static final String GUESTS_CAN_SEE_GUESTS = "guestsCanSeeGuests"; 10623d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff 10633d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff /** 1064c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Email of the organizer (owner) of the event. Column name. 10653d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff * <P>Type: STRING</P> 10663d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff */ 10673d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff public static final String ORGANIZER = "organizer"; 10683d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff 10693d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff /** 1070c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Whether the user can invite others to the event. The 1071c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * GUESTS_CAN_INVITE_OTHERS is a setting that applies to an arbitrary 1072c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * guest, while CAN_INVITE_OTHERS indicates if the user can invite 1073c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * others (either through GUESTS_CAN_INVITE_OTHERS or because the user 1074c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * has modify access to the event). Column name. 10753d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff * <P>Type: INTEGER (boolean, readonly)</P> 10763d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff */ 10773d037078b8313afb003e32d15a47a3b57af776cbKen Shirriff public static final String CAN_INVITE_OTHERS = "canInviteOthers"; 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1081c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Class that represents an Event Entity. There is one entry per event. 1082c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Recurring events show up as a single entry. This is a helper class to 1083c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * make batch operations easier. A {@link ContentResolver} or 1084c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * {@link ContentProviderClient} is required as the helper does additional 1085c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * queries to add reminders and attendees to each entry. 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1087651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final class EventsEntity implements BaseColumns, SyncColumns, EventsColumns { 1088328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 1089328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana * The content:// style URL for this table 1090328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 1091a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + 1092a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff "/event_entities"); 1093328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1094c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 10953672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 10963672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 10973672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private EventsEntity() {} 10983672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 10993672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 1100c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Creates a new iterator for events 1101c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1102c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cursor An event query 1103c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param resolver For performing additional queries 1104c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return an EntityIterator containing one entity per event in the 1105c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * cursor 1106c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 1107328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public static EntityIterator newEntityIterator(Cursor cursor, ContentResolver resolver) { 1108328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana return new EntityIteratorImpl(cursor, resolver); 1109328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1110328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1111c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1112c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Creates a new iterator for events 1113c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1114c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cursor An event query 1115c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param provider For performing additional queries 1116c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return an EntityIterator containing one entity per event in the 1117c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * cursor 1118c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 1119328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public static EntityIterator newEntityIterator(Cursor cursor, 1120328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ContentProviderClient provider) { 1121328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana return new EntityIteratorImpl(cursor, provider); 1122328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1123328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1124328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static class EntityIteratorImpl extends CursorEntityIterator { 1125328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private final ContentResolver mResolver; 1126328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private final ContentProviderClient mProvider; 1127328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1128328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final String[] REMINDERS_PROJECTION = new String[] { 1129328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Reminders.MINUTES, 1130328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Reminders.METHOD, 1131328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana }; 1132328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_MINUTES = 0; 1133328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_METHOD = 1; 1134328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1135328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final String[] ATTENDEES_PROJECTION = new String[] { 1136328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Attendees.ATTENDEE_NAME, 1137328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Attendees.ATTENDEE_EMAIL, 1138328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Attendees.ATTENDEE_RELATIONSHIP, 1139328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Attendees.ATTENDEE_TYPE, 1140328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Attendees.ATTENDEE_STATUS, 1141328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana }; 1142328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_ATTENDEE_NAME = 0; 1143328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_ATTENDEE_EMAIL = 1; 1144328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_ATTENDEE_RELATIONSHIP = 2; 1145328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_ATTENDEE_TYPE = 3; 1146328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final int COLUMN_ATTENDEE_STATUS = 4; 1147328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana private static final String[] EXTENDED_PROJECTION = new String[] { 11488f643c1040d45f03584b0382c7c5d933388b9103Marc Blank ExtendedProperties._ID, 1149328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ExtendedProperties.NAME, 11508f643c1040d45f03584b0382c7c5d933388b9103Marc Blank ExtendedProperties.VALUE 1151328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana }; 11528f643c1040d45f03584b0382c7c5d933388b9103Marc Blank private static final int COLUMN_ID = 0; 11538f643c1040d45f03584b0382c7c5d933388b9103Marc Blank private static final int COLUMN_NAME = 1; 11548f643c1040d45f03584b0382c7c5d933388b9103Marc Blank private static final int COLUMN_VALUE = 2; 1155328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 11561dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio private static final String WHERE_EVENT_ID = "event_id=?"; 11571dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 1158328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public EntityIteratorImpl(Cursor cursor, ContentResolver resolver) { 1159328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana super(cursor); 1160328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana mResolver = resolver; 1161328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana mProvider = null; 1162328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1163328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1164328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public EntityIteratorImpl(Cursor cursor, ContentProviderClient provider) { 1165328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana super(cursor); 1166328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana mResolver = null; 1167328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana mProvider = provider; 1168328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1169328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 117064a556d755d27b1182897e9243cf4f3016e76a88Marc Blank @Override 1171328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana public Entity getEntityAndIncrementCursor(Cursor cursor) throws RemoteException { 1172328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana // we expect the cursor is already at the row we need to read from 1173328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana final long eventId = cursor.getLong(cursor.getColumnIndexOrThrow(Events._ID)); 1174328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ContentValues cv = new ContentValues(); 1175328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana cv.put(Events._ID, eventId); 1176328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, CALENDAR_ID); 1177328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, TITLE); 1178328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, DESCRIPTION); 1179328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EVENT_LOCATION); 1180328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, STATUS); 1181328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, SELF_ATTENDEE_STATUS); 1182328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DTSTART); 1183328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DTEND); 1184328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, DURATION); 1185328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EVENT_TIMEZONE); 1186c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EVENT_END_TIMEZONE); 1187328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ALL_DAY); 1188651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, ACCESS_LEVEL); 1189651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, AVAILABILITY); 1190328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, HAS_ALARM); 1191328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, 1192328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana HAS_EXTENDED_PROPERTIES); 1193328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, RRULE); 1194328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, RDATE); 1195328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EXRULE); 1196328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EXDATE); 1197651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ORIGINAL_SYNC_ID); 1198c0bd9bcdd9fa2de9a11c09418208702d0791555aRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ORIGINAL_ID); 1199328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, 1200328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ORIGINAL_INSTANCE_TIME); 1201328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, ORIGINAL_ALL_DAY); 1202328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, LAST_DATE); 1203328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, HAS_ATTENDEE_DATA); 1204328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, 1205328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana GUESTS_CAN_INVITE_OTHERS); 1206328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, GUESTS_CAN_MODIFY); 1207328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, GUESTS_CAN_SEE_GUESTS); 1208328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ORGANIZER); 1209328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, _SYNC_ID); 1210651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DIRTY); 1211866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, LAST_SYNCED); 1212c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, DELETED); 12139734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA1); 12149734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA2); 12159734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA3); 12169734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA4); 12179734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA5); 12189734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA6); 12199734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA7); 12209734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA8); 12219734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA9); 12229734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA10); 1223be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC1); 1224be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC2); 1225be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC3); 1226be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC4); 1227be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC5); 1228be01039a7f5c4de42cb91d184d37ef8db1f83b79RoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC6); 12299734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC7); 12309734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC8); 12319734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC9); 12329734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC10); 1233328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1234328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Entity entity = new Entity(cv); 1235328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana Cursor subCursor; 1236328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana if (mResolver != null) { 1237328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mResolver.query(Reminders.CONTENT_URI, REMINDERS_PROJECTION, 12381dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 12391dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 12401dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1241328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } else { 1242328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mProvider.query(Reminders.CONTENT_URI, REMINDERS_PROJECTION, 12431dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 12441dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 12451dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1246328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1247328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana try { 1248328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana while (subCursor.moveToNext()) { 1249328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ContentValues reminderValues = new ContentValues(); 1250328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana reminderValues.put(Reminders.MINUTES, subCursor.getInt(COLUMN_MINUTES)); 1251328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana reminderValues.put(Reminders.METHOD, subCursor.getInt(COLUMN_METHOD)); 1252328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana entity.addSubValue(Reminders.CONTENT_URI, reminderValues); 1253328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1254328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } finally { 1255328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.close(); 1256328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1257328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1258328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana if (mResolver != null) { 1259328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mResolver.query(Attendees.CONTENT_URI, ATTENDEES_PROJECTION, 12601dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 12611dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 12621dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1263328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } else { 1264328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mProvider.query(Attendees.CONTENT_URI, ATTENDEES_PROJECTION, 12651dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 12661dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 12671dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1268328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1269328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana try { 1270328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana while (subCursor.moveToNext()) { 1271328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ContentValues attendeeValues = new ContentValues(); 1272328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana attendeeValues.put(Attendees.ATTENDEE_NAME, 1273328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.getString(COLUMN_ATTENDEE_NAME)); 1274328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana attendeeValues.put(Attendees.ATTENDEE_EMAIL, 1275328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.getString(COLUMN_ATTENDEE_EMAIL)); 1276328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana attendeeValues.put(Attendees.ATTENDEE_RELATIONSHIP, 1277328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.getInt(COLUMN_ATTENDEE_RELATIONSHIP)); 1278328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana attendeeValues.put(Attendees.ATTENDEE_TYPE, 1279328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.getInt(COLUMN_ATTENDEE_TYPE)); 1280328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana attendeeValues.put(Attendees.ATTENDEE_STATUS, 1281328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.getInt(COLUMN_ATTENDEE_STATUS)); 1282328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana entity.addSubValue(Attendees.CONTENT_URI, attendeeValues); 1283328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1284328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } finally { 1285328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.close(); 1286328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1287328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1288328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana if (mResolver != null) { 1289328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mResolver.query(ExtendedProperties.CONTENT_URI, EXTENDED_PROJECTION, 12901dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 12911dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 12921dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1293328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } else { 1294328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor = mProvider.query(ExtendedProperties.CONTENT_URI, EXTENDED_PROJECTION, 12951dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio WHERE_EVENT_ID, 12961dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio new String[] { Long.toString(eventId) } /* selectionArgs */, 12971dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio null /* sortOrder */); 1298328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1299328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana try { 1300328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana while (subCursor.moveToNext()) { 1301328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana ContentValues extendedValues = new ContentValues(); 13028f643c1040d45f03584b0382c7c5d933388b9103Marc Blank extendedValues.put(ExtendedProperties._ID, 13038f643c1040d45f03584b0382c7c5d933388b9103Marc Blank subCursor.getString(COLUMN_ID)); 13043b16892c6bc6b804133163db24ffc5ff54b9a8fbKen Shirriff extendedValues.put(ExtendedProperties.NAME, 13053b16892c6bc6b804133163db24ffc5ff54b9a8fbKen Shirriff subCursor.getString(COLUMN_NAME)); 1306328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana extendedValues.put(ExtendedProperties.VALUE, 13073b16892c6bc6b804133163db24ffc5ff54b9a8fbKen Shirriff subCursor.getString(COLUMN_VALUE)); 1308328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana entity.addSubValue(ExtendedProperties.CONTENT_URI, extendedValues); 1309328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1310328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } finally { 1311328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana subCursor.close(); 1312328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1313328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1314328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana cursor.moveToNext(); 1315328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana return entity; 1316328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1317328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1318328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana } 1319328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana 1320328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana /** 1321f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * Constants and helpers for the Events table, which contains details for 1322f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * individual events. <h3>Operations</h3> All operations can be done either 1323f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * as an app or as a sync adapter. To perform an operation as a sync adapter 1324f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link #CALLER_IS_SYNCADAPTER} should be set to true and 1325f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link #ACCOUNT_NAME} and {@link #ACCOUNT_TYPE} must be set in the Uri 1326f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * parameters. See 1327f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * {@link Uri.Builder#appendQueryParameter(java.lang.String, java.lang.String)} 1328f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * for details on adding parameters. Sync adapters have write access to more 1329f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * columns but are restricted to a single account at a time. 1330fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dl> 1331fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dt><b>Insert</b></dt> 1332fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dd>When inserting a new event the following fields must be included: 1333fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <ul> 1334fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>dtstart</li> 1335fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>dtend -or- a (rrule or rdate) and a duration</li> 1336fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>a calendar_id</li> 1337fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * </ul> 1338fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * There are also further requirements when inserting or updating an event. 1339fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * See the section on Writing to Events.</dd> 1340fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dt><b>Update</b></dt> 1341f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * <dd>To perform an update of an Event the {@link Events#_ID} of the event 1342f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * should be provided either as an appended id to the Uri ( 1343fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * {@link ContentUris#withAppendedId}) or as the first selection item--the 1344fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * selection should start with "_id=?" and the first selectionArg should be 1345f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * the _id of the event. Updates may also be done using a selection and no 1346f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * id. Updating an event must respect the same rules as inserting and is 1347f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * further restricted in the fields that can be written. See the section on 1348f4010c5768514c41dc671ec67157ba24880b4c6fRoboErik * Writing to Events.</dd> 1349fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dt><b>Delete</b></dt> 1350fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dd>Events can be deleted either by the {@link Events#_ID} as an appended 1351fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * id on the Uri or using any standard selection. If an appended id is used 1352fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * a selection is not allowed. There are two versions of delete: as an app 1353fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * and as a sync adapter. An app delete will set the deleted column on an 1354fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * event and remove all instances of that event. A sync adapter delete will 1355fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * remove the event from the database and all associated data.</dd> 1356fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dt><b>Query</b></dt> 1357fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <dd>Querying the Events table will get you all information about a set of 1358fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * events except their reminders, attendees, and extended properties. There 1359fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * will be one row returned for each event that matches the query selection, 1360fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * or at most a single row if the {@link Events#_ID} is appended to the Uri. 1361fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * Recurring events will only return a single row regardless of the number 1362fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * of times that event repeats.</dd> 1363fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * </dl> 1364fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <h3>Writing to Events</h3> There are further restrictions on all Updates 1365fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * and Inserts in the Events table: 1366fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <ul> 1367fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>If allDay is set to 1 eventTimezone must be {@link Time#TIMEZONE_UTC} 1368fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * and the time must correspond to a midnight boundary.</li> 1369fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>Exceptions are not allowed to recur. If rrule or rdate is not empty, 1370fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * original_id and original_sync_id must be empty.</li> 1371fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>In general a calendar_id should not be modified after insertion. This 1372fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * is not explicitly forbidden but many sync adapters will not behave in an 1373fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * expected way if the calendar_id is modified.</li> 1374fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * </ul> 1375fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * The following Events columns are writable by both an app and a sync 1376fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * adapter. 1377fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <ul> 1378fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #CALENDAR_ID}</li> 1379fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ORGANIZER}</li> 1380fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #TITLE}</li> 1381fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EVENT_LOCATION}</li> 1382fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #DESCRIPTION}</li> 1383fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EVENT_COLOR}</li> 1384fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #DTSTART}</li> 1385fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #DTEND}</li> 1386fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EVENT_TIMEZONE}</li> 1387fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EVENT_END_TIMEZONE}</li> 1388fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #DURATION}</li> 1389fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ALL_DAY}</li> 1390fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #RRULE}</li> 1391fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #RDATE}</li> 1392fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EXRULE}</li> 1393fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #EXDATE}</li> 1394fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ORIGINAL_ID}</li> 1395fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ORIGINAL_SYNC_ID}</li> 1396fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ORIGINAL_INSTANCE_TIME}</li> 1397fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ORIGINAL_ALL_DAY}</li> 1398fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #ACCESS_LEVEL}</li> 1399fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #AVAILABILITY}</li> 1400fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #GUESTS_CAN_MODIFY}</li> 1401fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #GUESTS_CAN_INVITE_OTHERS}</li> 1402fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #GUESTS_CAN_SEE_GUESTS}</li> 1403fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * </ul> 1404fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * The following Events columns are writable only by a sync adapter 1405fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <ul> 1406fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #DIRTY}</li> 1407fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #_SYNC_ID}</li> 1408fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA1}</li> 1409fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA2}</li> 1410fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA3}</li> 1411fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA4}</li> 1412fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA5}</li> 1413fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA6}</li> 1414fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA7}</li> 1415fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA8}</li> 1416fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA9}</li> 1417fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * <li>{@link #SYNC_DATA10}</li> 1418fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * </ul> 1419fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * The remaining columns are either updated by the provider only or are 1420fe37b49dd416e8b6b6148290bea6b3a38a3c5661RoboErik * views into other tables and cannot be changed through the Events table. 1421328c0e7986aa6bb7752ec6de3da9c999920bb55fFred Quintana */ 14229734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik public static final class Events implements BaseColumns, SyncColumns, EventsColumns, 1423e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik CalendarColumns { 14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1425c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1426c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for interacting with events. Appending an 1427c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * event id using {@link ContentUris#withAppendedId(Uri, long)} will 1428c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * specify a single event. 14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1430c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri CONTENT_URI = 1432a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff Uri.parse("content://" + AUTHORITY + "/events"); 14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14354a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden * The content:// style URI for recurring event exceptions. Insertions require an 14364a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden * appended event ID. Deletion of exceptions requires both the original event ID and 14374a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden * the exception event ID (see {@link Uri.Builder#appendPath}). 14384a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden */ 1439083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final Uri CONTENT_EXCEPTION_URI = 14404a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden Uri.parse("content://" + AUTHORITY + "/exception"); 14414a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden 14424a8c478dfadbc86938576f72c25799893cb3b92cAndy McFadden /** 14433672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 14443672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 14453672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private Events() {} 14463672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 14473672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table 14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1450c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String DEFAULT_SORT_ORDER = ""; 1451651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik 1452651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 1453651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * These are columns that should only ever be updated by the provider, 1454651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * either because they are views mapped to another table or because they 1455083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * are used for provider only functionality. TODO move to provider 1456083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * 1457083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 1458651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 1459651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static String[] PROVIDER_WRITABLE_COLUMNS = new String[] { 1460651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik ACCOUNT_NAME, 1461c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik ACCOUNT_TYPE, 1462c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC1, 1463c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC2, 1464c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC3, 1465c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC4, 1466c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik CAL_SYNC5, 1467866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert CAL_SYNC6, 14689734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC7, 14699734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC8, 14709734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC9, 14719734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAL_SYNC10, 14729734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik ALLOWED_REMINDERS, 14739734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_ACCESS_LEVEL, 14749734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_COLOR, 14759734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_TIME_ZONE, 14769734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAN_MODIFY_TIME_ZONE, 14779734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CAN_ORGANIZER_RESPOND, 14789734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik CALENDAR_DISPLAY_NAME, 1479866f40aeda0b771bfac28bbf51959b128538c4acAlon Albert CAN_PARTIALLY_UPDATE, 14809734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_EVENTS, 14819734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik VISIBLE, 1482651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik }; 1483651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik 1484651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik /** 1485651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * These fields are only writable by a sync adapter. To modify them the 1486651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik * caller must include CALLER_IS_SYNCADAPTER, _SYNC_ACCOUNT, and 1487083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * _SYNC_ACCOUNT_TYPE in the query parameters. TODO move to provider. 1488083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * 1489083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 1490651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik */ 1491651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik public static final String[] SYNC_WRITABLE_COLUMNS = new String[] { 1492651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik _SYNC_ID, 1493651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik DIRTY, 14949734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA1, 14959734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA2, 14969734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA3, 14979734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA4, 14989734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA5, 14999734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA6, 15009734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA7, 15019734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA8, 15029734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA9, 15039734df5f0cc8a1256f64b464c4cc884def00b1fbRoboErik SYNC_DATA10, 1504651c02e61fb6f1776fb2688c6f740df0d5b7f4bbRoboErik }; 15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1508c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Fields and helpers for interacting with Instances. An instance is a 1509c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * single occurrence of an event including time zone specific start and end 15103771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * days and minutes. The instances table is not writable and only provides a 15113771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * way to query event occurrences. 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1513e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik public static final class Instances implements BaseColumns, EventsColumns, CalendarColumns { 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1515e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik private static final String WHERE_CALENDARS_SELECTED = Calendars.VISIBLE + "=?"; 1516e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik private static final String[] WHERE_CALENDARS_ARGS = { 1517e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik "1" 1518e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik }; 15191dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 1520c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 15213672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 15223672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 15233672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private Instances() {} 15243672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 15253672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 1526c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Performs a query to return all visible instances in the given range. 1527c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * This is a blocking function and should not be done on the UI thread. 1528c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * This will cause an expansion of recurring events to fill this time 1529c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * range if they are not already expanded and will slow down for larger 1530c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * time ranges with many recurring events. 1531c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1532c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cr The ContentResolver to use for the query 1533c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param projection The columns to return 1534c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param begin The start of the time range to query in UTC millis since 1535c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * epoch 1536c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param end The end of the time range to query in UTC millis since 1537c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * epoch 1538c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return A Cursor containing all instances in the given range 1539c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Cursor query(ContentResolver cr, String[] projection, 15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long begin, long end) { 15429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.Builder builder = CONTENT_URI.buildUpon(); 15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentUris.appendId(builder, begin); 15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentUris.appendId(builder, end); 15451dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio return cr.query(builder.build(), projection, WHERE_CALENDARS_SELECTED, 1546e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik WHERE_CALENDARS_ARGS, DEFAULT_SORT_ORDER); 15479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1550c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Performs a query to return all visible instances in the given range 1551c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * that match the given query. This is a blocking function and should 1552c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * not be done on the UI thread. This will cause an expansion of 1553c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * recurring events to fill this time range if they are not already 1554c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * expanded and will slow down for larger time ranges with many 1555c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * recurring events. 1556c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 1557c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cr The ContentResolver to use for the query 1558c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param projection The columns to return 1559c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param begin The start of the time range to query in UTC millis since 1560c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * epoch 1561c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param end The end of the time range to query in UTC millis since 1562c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * epoch 1563c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param searchQuery A string of space separated search terms. Segments 1564c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * enclosed by double quotes will be treated as a single 1565c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * term. 1566c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return A Cursor of instances matching the search terms in the given 1567c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * time range 1568c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Cursor query(ContentResolver cr, String[] projection, 157019f845804c4b8f295669bbe7338d91d42451a0fdMason Tang long begin, long end, String searchQuery) { 157119f845804c4b8f295669bbe7338d91d42451a0fdMason Tang Uri.Builder builder = CONTENT_SEARCH_URI.buildUpon(); 157219f845804c4b8f295669bbe7338d91d42451a0fdMason Tang ContentUris.appendId(builder, begin); 157319f845804c4b8f295669bbe7338d91d42451a0fdMason Tang ContentUris.appendId(builder, end); 1574c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik builder = builder.appendPath(searchQuery); 1575e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik return cr.query(builder.build(), projection, WHERE_CALENDARS_SELECTED, 1576e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik WHERE_CALENDARS_ARGS, DEFAULT_SORT_ORDER); 157719f845804c4b8f295669bbe7338d91d42451a0fdMason Tang } 157819f845804c4b8f295669bbe7338d91d42451a0fdMason Tang 15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1580c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for querying an instance range. The begin 1581c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * and end of the range to query should be added as path segments if 1582c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * this is used directly. 15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1584c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 1585a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + 1586a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff "/instances/when"); 1587c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1588c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for querying an instance range by Julian 1589c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Day. The start and end day should be added as path segments if this 1590c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * is used directly. 1591c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 15922cfb0d166b5e8a0e89b2b3d19abe4f76ff38cfabMichael Chan public static final Uri CONTENT_BY_DAY_URI = 1593a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff Uri.parse("content://" + AUTHORITY + "/instances/whenbyday"); 1594c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1595c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for querying an instance range with a search 1596c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * term. The begin, end, and search string should be appended as path 1597c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * segments if this is used directly. 1598c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 159919f845804c4b8f295669bbe7338d91d42451a0fdMason Tang public static final Uri CONTENT_SEARCH_URI = Uri.parse("content://" + AUTHORITY + 160019f845804c4b8f295669bbe7338d91d42451a0fdMason Tang "/instances/search"); 1601c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1602c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The content:// style URL for querying an instance range with a search 1603c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * term. The start day, end day, and search string should be appended as 1604c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * path segments if this is used directly. 1605c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 160619f845804c4b8f295669bbe7338d91d42451a0fdMason Tang public static final Uri CONTENT_SEARCH_BY_DAY_URI = 160719f845804c4b8f295669bbe7338d91d42451a0fdMason Tang Uri.parse("content://" + AUTHORITY + "/instances/searchbyday"); 16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default sort order for this table. 16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1612c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String DEFAULT_SORT_ORDER = "begin ASC"; 16139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1615c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The beginning time of the instance, in UTC milliseconds. Column name. 16169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 16179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String BEGIN = "begin"; 16199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1621c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The ending time of the instance, in UTC milliseconds. Column name. 16229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 16239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String END = "end"; 16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1627c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The _id of the event for this instance. Column name. 16289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long, foreign key to the Events table)</P> 16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_ID = "event_id"; 16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1633c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The Julian start day of the instance, relative to the local time 1634c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * zone. Column name. 16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String START_DAY = "startDay"; 16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1640c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The Julian end day of the instance, relative to the local time 1641c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * zone. Column name. 16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String END_DAY = "endDay"; 16459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The start minute of the instance measured from midnight in the 1648c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * local time zone. Column name. 16499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 16509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String START_MINUTE = "startMinute"; 16529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The end minute of the instance measured from midnight in the 1655c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * local time zone. Column name. 16569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (int)</P> 16579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String END_MINUTE = "endMinute"; 16599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1661b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface CalendarCacheColumns { 166271ad58c751eb12a500916556c41e704a93895801Erik /** 1663c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The key for the setting. Keys are defined in {@link CalendarCache}. 166471ad58c751eb12a500916556c41e704a93895801Erik */ 166571ad58c751eb12a500916556c41e704a93895801Erik public static final String KEY = "key"; 166671ad58c751eb12a500916556c41e704a93895801Erik 166771ad58c751eb12a500916556c41e704a93895801Erik /** 166871ad58c751eb12a500916556c41e704a93895801Erik * The value of the given setting. 166971ad58c751eb12a500916556c41e704a93895801Erik */ 167071ad58c751eb12a500916556c41e704a93895801Erik public static final String VALUE = "value"; 167171ad58c751eb12a500916556c41e704a93895801Erik } 167271ad58c751eb12a500916556c41e704a93895801Erik 1673083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik /** 1674083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * CalendarCache stores some settings for calendar including the current 1675083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * time zone for the instances. These settings are stored using a key/value 1676083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * scheme. A {@link #KEY} must be specified when updating these values. 1677083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik */ 16783672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik public static final class CalendarCache implements CalendarCacheColumns { 167971ad58c751eb12a500916556c41e704a93895801Erik /** 168071ad58c751eb12a500916556c41e704a93895801Erik * The URI to use for retrieving the properties from the Calendar db. 168171ad58c751eb12a500916556c41e704a93895801Erik */ 168271ad58c751eb12a500916556c41e704a93895801Erik public static final Uri URI = 168371ad58c751eb12a500916556c41e704a93895801Erik Uri.parse("content://" + AUTHORITY + "/properties"); 168471ad58c751eb12a500916556c41e704a93895801Erik 168571ad58c751eb12a500916556c41e704a93895801Erik /** 16863672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 16873672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 16883672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private CalendarCache() {} 16893672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 16903672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 169171ad58c751eb12a500916556c41e704a93895801Erik * They key for updating the use of auto/home time zones in Calendar. 169271ad58c751eb12a500916556c41e704a93895801Erik * Valid values are {@link #TIMEZONE_TYPE_AUTO} or 169371ad58c751eb12a500916556c41e704a93895801Erik * {@link #TIMEZONE_TYPE_HOME}. 169471ad58c751eb12a500916556c41e704a93895801Erik */ 1695083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final String KEY_TIMEZONE_TYPE = "timezoneType"; 169671ad58c751eb12a500916556c41e704a93895801Erik 169771ad58c751eb12a500916556c41e704a93895801Erik /** 169871ad58c751eb12a500916556c41e704a93895801Erik * The key for updating the time zone used by the provider when it 169971ad58c751eb12a500916556c41e704a93895801Erik * generates the instances table. This should only be written if the 170071ad58c751eb12a500916556c41e704a93895801Erik * type is set to {@link #TIMEZONE_TYPE_HOME}. A valid time zone id 170171ad58c751eb12a500916556c41e704a93895801Erik * should be written to this field. 170271ad58c751eb12a500916556c41e704a93895801Erik */ 1703083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final String KEY_TIMEZONE_INSTANCES = "timezoneInstances"; 170471ad58c751eb12a500916556c41e704a93895801Erik 170571ad58c751eb12a500916556c41e704a93895801Erik /** 170671ad58c751eb12a500916556c41e704a93895801Erik * The key for reading the last time zone set by the user. This should 170771ad58c751eb12a500916556c41e704a93895801Erik * only be read by apps and it will be automatically updated whenever 1708083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * {@link #KEY_TIMEZONE_INSTANCES} is updated with 170971ad58c751eb12a500916556c41e704a93895801Erik * {@link #TIMEZONE_TYPE_HOME} set. 171071ad58c751eb12a500916556c41e704a93895801Erik */ 1711083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final String KEY_TIMEZONE_INSTANCES_PREVIOUS = "timezoneInstancesPrevious"; 171271ad58c751eb12a500916556c41e704a93895801Erik 171371ad58c751eb12a500916556c41e704a93895801Erik /** 1714083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * The value to write to {@link #KEY_TIMEZONE_TYPE} if the provider 171571ad58c751eb12a500916556c41e704a93895801Erik * should stay in sync with the device's time zone. 171671ad58c751eb12a500916556c41e704a93895801Erik */ 171771ad58c751eb12a500916556c41e704a93895801Erik public static final String TIMEZONE_TYPE_AUTO = "auto"; 171871ad58c751eb12a500916556c41e704a93895801Erik 171971ad58c751eb12a500916556c41e704a93895801Erik /** 1720083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * The value to write to {@link #KEY_TIMEZONE_TYPE} if the provider 172171ad58c751eb12a500916556c41e704a93895801Erik * should use a fixed time zone set by the user. 172271ad58c751eb12a500916556c41e704a93895801Erik */ 172371ad58c751eb12a500916556c41e704a93895801Erik public static final String TIMEZONE_TYPE_HOME = "home"; 172471ad58c751eb12a500916556c41e704a93895801Erik } 172571ad58c751eb12a500916556c41e704a93895801Erik 172671ad58c751eb12a500916556c41e704a93895801Erik /** 17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A few Calendar globals are needed in the CalendarProvider for expanding 172859dab49cb8350afd1baa77999ec2f91283d78536RoboErik * the Instances table and these are all stored in the first (and only) row 172959dab49cb8350afd1baa77999ec2f91283d78536RoboErik * of the CalendarMetaData table. 173059dab49cb8350afd1baa77999ec2f91283d78536RoboErik * 173159dab49cb8350afd1baa77999ec2f91283d78536RoboErik * @hide 17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1733b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface CalendarMetaDataColumns { 17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The local timezone that was used for precomputing the fields 17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the Instances table. 17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String LOCAL_TIMEZONE = "localTimezone"; 17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The minimum time used in expanding the Instances table, 17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in UTC milliseconds. 17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MIN_INSTANCE = "minInstance"; 17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The maximum time used in expanding the Instances table, 17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in UTC milliseconds. 17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MAX_INSTANCE = "maxInstance"; 17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17553763464e8f0df4d387ff46803e5a9c76045c85e6Erik * The minimum Julian day in the EventDays table. 17563763464e8f0df4d387ff46803e5a9c76045c85e6Erik * <P>Type: INTEGER</P> 17573763464e8f0df4d387ff46803e5a9c76045c85e6Erik */ 17583763464e8f0df4d387ff46803e5a9c76045c85e6Erik public static final String MIN_EVENTDAYS = "minEventDays"; 17593763464e8f0df4d387ff46803e5a9c76045c85e6Erik 17603763464e8f0df4d387ff46803e5a9c76045c85e6Erik /** 17613763464e8f0df4d387ff46803e5a9c76045c85e6Erik * The maximum Julian day in the EventDays table. 17623763464e8f0df4d387ff46803e5a9c76045c85e6Erik * <P>Type: INTEGER</P> 17633763464e8f0df4d387ff46803e5a9c76045c85e6Erik */ 17643763464e8f0df4d387ff46803e5a9c76045c85e6Erik public static final String MAX_EVENTDAYS = "maxEventDays"; 17659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17665b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 1767c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1768c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @hide 1769c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 1770505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final class CalendarMetaData implements CalendarMetaDataColumns, BaseColumns { 17713672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 17723672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 17733672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 17743672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 17753672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private CalendarMetaData() {} 17769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17773763464e8f0df4d387ff46803e5a9c76045c85e6Erik 1778b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface EventDaysColumns { 17793763464e8f0df4d387ff46803e5a9c76045c85e6Erik /** 1780c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The Julian starting day number. Column name. 17813763464e8f0df4d387ff46803e5a9c76045c85e6Erik * <P>Type: INTEGER (int)</P> 17823763464e8f0df4d387ff46803e5a9c76045c85e6Erik */ 17833763464e8f0df4d387ff46803e5a9c76045c85e6Erik public static final String STARTDAY = "startDay"; 1784c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1785c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The Julian ending day number. Column name. 1786c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER (int)</P> 1787c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 1788bd8e2e20a9a1d98f1521ec1f98b6403e73b275d3Erik public static final String ENDDAY = "endDay"; 17893763464e8f0df4d387ff46803e5a9c76045c85e6Erik 17903763464e8f0df4d387ff46803e5a9c76045c85e6Erik } 17913763464e8f0df4d387ff46803e5a9c76045c85e6Erik 1792c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1793c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Fields and helpers for querying for a list of days that contain events. 1794c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 17953763464e8f0df4d387ff46803e5a9c76045c85e6Erik public static final class EventDays implements EventDaysColumns { 1796b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY 1797c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik + "/instances/groupbyday"); 1798c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String SELECTION = "selected=1"; 17993763464e8f0df4d387ff46803e5a9c76045c85e6Erik 18003763464e8f0df4d387ff46803e5a9c76045c85e6Erik /** 18013672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 18023672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 18033672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private EventDays() {} 18043672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 18053672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 1806c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Retrieves the days with events for the Julian days starting at 1807c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * "startDay" for "numDays". It returns a cursor containing startday and 1808c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * endday representing the max range of days for all events beginning on 1809c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * each startday.This is a blocking function and should not be done on 1810c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * the UI thread. 18113672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * 18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr the ContentResolver 18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param startDay the first Julian day in the range 18149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param numDays the number of days to load (must be at least 1) 181558644028f909ecb429b26f909bedfb62a153d4e4RoboErik * @param projection the columns to return in the cursor 1816c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return a database cursor containing a list of start and end days for 1817c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * events 18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 181958644028f909ecb429b26f909bedfb62a153d4e4RoboErik public static final Cursor query(ContentResolver cr, int startDay, int numDays, 182058644028f909ecb429b26f909bedfb62a153d4e4RoboErik String[] projection) { 18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (numDays < 1) { 18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int endDay = startDay + numDays - 1; 18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.Builder builder = CONTENT_URI.buildUpon(); 18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentUris.appendId(builder, startDay); 18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentUris.appendId(builder, endDay); 182858644028f909ecb429b26f909bedfb62a153d4e4RoboErik return cr.query(builder.build(), projection, SELECTION, 18293763464e8f0df4d387ff46803e5a9c76045c85e6Erik null /* selection args */, STARTDAY); 18309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1833b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface RemindersColumns { 18349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1835c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The event the reminder belongs to. Column name. 18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (foreign key to the Events table)</P> 18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_ID = "event_id"; 18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The minutes prior to the event that the alarm should ring. -1 18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specifies that we should use the default value for the system. 1843c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Column name. 18449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 18459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MINUTES = "minutes"; 18479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1848c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1849c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Passing this as a minutes value will use the default reminder 1850c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * minutes. 1851c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 18529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MINUTES_DEFAULT = -1; 18539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1855c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The alarm method, as set on the server. {@link #METHOD_DEFAULT}, 1856c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * {@link #METHOD_ALERT}, {@link #METHOD_EMAIL}, and {@link #METHOD_SMS} 1857c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * are possible values; the device will only process 1858c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * {@link #METHOD_DEFAULT} and {@link #METHOD_ALERT} reminders (the 1859c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * other types are simply stored so we can send the same reminder info 1860c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * back to the server when we make changes). 18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String METHOD = "method"; 18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int METHOD_DEFAULT = 0; 18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int METHOD_ALERT = 1; 18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int METHOD_EMAIL = 2; 18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int METHOD_SMS = 3; 18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1870c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 18713771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * Fields and helpers for accessing reminders for an event. Each row of this 18723771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * table represents a single reminder for an event. Calling 187358644028f909ecb429b26f909bedfb62a153d4e4RoboErik * {@link #query(ContentResolver, long, String[])} will return a list of reminders for 18743771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * the event with the given eventId. Both apps and sync adapters may write 18753771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * to this table. There are three writable fields and all of them must be 18763771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * included when inserting a new reminder. They are: 18773771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <ul> 18783771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #EVENT_ID}</li> 18793771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #MINUTES}</li> 18803771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #METHOD}</li> 18813771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * </ul> 1882c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 18839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class Reminders implements BaseColumns, RemindersColumns, EventsColumns { 1884bec6c36b96f7bc415af18abbb142bd51a1741796RoboErik private static final String REMINDERS_WHERE = CalendarContract.Reminders.EVENT_ID + "=?"; 1885c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 1886a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/reminders"); 1887c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik 1888c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 18893672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 18903672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 18913672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private Reminders() {} 18923672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 18933672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 1894c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Queries all reminders associated with the given event. This is a 1895c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * blocking call and should not be done on the UI thread. 18963672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * 1897c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param cr The content resolver to use for the query 1898c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param eventId The id of the event to retrieve reminders for 189958644028f909ecb429b26f909bedfb62a153d4e4RoboErik * @param projection the columns to return in the cursor 1900c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @return A Cursor containing all reminders for the event 1901c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 190258644028f909ecb429b26f909bedfb62a153d4e4RoboErik public static final Cursor query(ContentResolver cr, long eventId, String[] projection) { 1903c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik String[] remArgs = {Long.toString(eventId)}; 190458644028f909ecb429b26f909bedfb62a153d4e4RoboErik return cr.query(CONTENT_URI, projection, REMINDERS_WHERE, remArgs /*selection args*/, 1905c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik null /* sort order */); 1906c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik } 19079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface CalendarAlertsColumns { 19109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1911c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The event that the alert belongs to. Column name. 19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (foreign key to the Events table)</P> 19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_ID = "event_id"; 19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1917c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The start time of the event, in UTC. Column name. 19189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 19199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String BEGIN = "begin"; 19219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1923c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The end time of the event, in UTC. Column name. 19249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 19259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String END = "end"; 19279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1929c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The alarm time of the event, in UTC. Column name. 19309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 19319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ALARM_TIME = "alarmTime"; 19339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The creation time of this database entry, in UTC. 1936c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Useful for debugging missed reminders. Column name. 19379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CREATION_TIME = "creationTime"; 19409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time that the alarm broadcast was received by the Calendar app, 1943c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * in UTC. Useful for debugging missed reminders. Column name. 19449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 19459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String RECEIVED_TIME = "receivedTime"; 19479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time that the notification was created by the Calendar app, 1950c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * in UTC. Useful for debugging missed reminders. Column name. 19519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (long; millis since epoch)</P> 19529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NOTIFY_TIME = "notifyTime"; 19549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1956083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * The state of this alert. It starts out as {@link #STATE_SCHEDULED}, then 1957083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * when the alarm goes off, it changes to {@link #STATE_FIRED}, and then when 1958083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * the user dismisses the alarm it changes to {@link #STATE_DISMISSED}. Column 1959c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * name. 19609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER</P> 19619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String STATE = "state"; 19639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1964083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik /** 1965083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * An alert begins in this state when it is first created. 1966083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik */ 1967083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final int STATE_SCHEDULED = 0; 1968083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik /** 1969083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * After a notification for an alert has been created it should be 1970083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * updated to fired. 1971083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik */ 1972083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final int STATE_FIRED = 1; 1973083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik /** 1974083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * Once the user has dismissed the notification the alert's state should 1975083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * be set to dismissed so it is not fired again. 1976083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik */ 1977083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik public static final int STATE_DISMISSED = 2; 19789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1980c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The number of minutes that this alarm precedes the start time. Column 1981c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * name. 1982c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * <P>Type: INTEGER</P> 19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String MINUTES = "minutes"; 19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1987c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The default sort order for this alerts queries 19889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1989cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan public static final String DEFAULT_SORT_ORDER = "begin ASC,title ASC"; 19909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1992c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 1993c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Fields and helpers for accessing calendar alerts information. These 19943771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * fields are for tracking which alerts have been fired. Scheduled alarms 1995e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik * will generate an intent using {@link #ACTION_EVENT_REMINDER}. Apps that 19963771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * receive this action may update the {@link #STATE} for the reminder when 19973771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * they have finished handling it. Apps that have their notifications 19983771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * disabled should not modify the table to ensure that they do not conflict 19993771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * with another app that is generating a notification. In general, apps 20003771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * should not need to write to this table directly except to update the 20013771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * state of a reminder. 2002c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 20039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class CalendarAlerts implements BaseColumns, 2004e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik CalendarAlertsColumns, EventsColumns, CalendarColumns { 20051dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 2006c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2007c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @hide 2008c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 20099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String TABLE_NAME = "CalendarAlerts"; 2010c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2011c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The Uri for querying calendar alert information 2012c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 2013c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik @SuppressWarnings("hiding") 2014a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + 2015a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff "/calendar_alerts"); 20165b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 20173672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 20183672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 20193672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 20203672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private CalendarAlerts() {} 20213672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 20221dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio private static final String WHERE_ALARM_EXISTS = EVENT_ID + "=?" 20231dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio + " AND " + BEGIN + "=?" 20241dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio + " AND " + ALARM_TIME + "=?"; 20251dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 20261dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio private static final String WHERE_FINDNEXTALARMTIME = ALARM_TIME + ">=?"; 20271dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio private static final String SORT_ORDER_ALARMTIME_ASC = ALARM_TIME + " ASC"; 20281dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 2029083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik private static final String WHERE_RESCHEDULE_MISSED_ALARMS = STATE + "=" + STATE_SCHEDULED 20301dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio + " AND " + ALARM_TIME + "<?" 20311dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio + " AND " + ALARM_TIME + ">?" 20321dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio + " AND " + END + ">=?"; 20331dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio 20349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This URI is for grouping the query results by event_id and begin 20369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * time. This will return one result per instance of an event. So 20379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events with multiple alarms will appear just once, but multiple 20389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instances of a repeating event will show up multiple times. 20399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20405b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff public static final Uri CONTENT_URI_BY_INSTANCE = 2041a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff Uri.parse("content://" + AUTHORITY + "/calendar_alerts/by_instance"); 20429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2043083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik private static final boolean DEBUG = false; 2044cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 2045c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2046083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * Helper for inserting an alarm time associated with an event TODO move 2047083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * to Provider 2048c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 2049c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @hide 2050c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 20519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri insert(ContentResolver cr, long eventId, 20529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long begin, long end, long alarmTime, int minutes) { 20539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues values = new ContentValues(); 20549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.EVENT_ID, eventId); 20559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.BEGIN, begin); 20569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.END, end); 20579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.ALARM_TIME, alarmTime); 20589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long currentTime = System.currentTimeMillis(); 20599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.CREATION_TIME, currentTime); 20609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.RECEIVED_TIME, 0); 20619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.NOTIFY_TIME, 0); 2062083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik values.put(CalendarAlerts.STATE, STATE_SCHEDULED); 20639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(CalendarAlerts.MINUTES, minutes); 20649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cr.insert(CONTENT_URI, values); 20659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2067c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 20689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Finds the next alarm after (or equal to) the given time and returns 2069c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * the time of that alarm or -1 if no such alarm exists. This is a 2070083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * blocking call and should not be done on the UI thread. TODO move to 2071083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * provider 20725b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff * 20739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr the ContentResolver 20749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param millis the time in UTC milliseconds 20759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the next alarm time greater than or equal to "millis", or -1 2076c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * if no such alarm exists. 2077083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 20789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final long findNextAlarmTime(ContentResolver cr, long millis) { 20809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String selection = ALARM_TIME + ">=" + millis; 20819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: construct an explicit SQL query so that we can add 20829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // "LIMIT 1" to the end and get just one result. 20839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] projection = new String[] { ALARM_TIME }; 2084083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik Cursor cursor = cr.query(CONTENT_URI, projection, WHERE_FINDNEXTALARMTIME, 2085083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik (new String[] { 20861dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio Long.toString(millis) 2087083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik }), SORT_ORDER_ALARMTIME_ASC); 20889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long alarmTime = -1; 20899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 20909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cursor != null && cursor.moveToFirst()) { 20919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project alarmTime = cursor.getLong(0); 20929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 20949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cursor != null) { 20959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor.close(); 20969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return alarmTime; 20999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21005b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 21019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Searches the CalendarAlerts table for alarms that should have fired 2103083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * but have not and then reschedules them. This method can be called at 2104083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * boot time to restore alarms that may have been lost due to a phone 2105083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * reboot. TODO move to provider 21065b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff * 21079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr the ContentResolver 21089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context the Context 21099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param manager the AlarmManager 2110083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 21119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void rescheduleMissedAlarms(ContentResolver cr, 21139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Context context, AlarmManager manager) { 21149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Get all the alerts that have been scheduled but have not fired 21159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // and should have fired by now and are not too old. 21169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long now = System.currentTimeMillis(); 2117cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan long ancient = now - DateUtils.DAY_IN_MILLIS; 21189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] projection = new String[] { 21199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ALARM_TIME, 21209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2121cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 2122cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan // TODO: construct an explicit SQL query so that we can add 2123cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan // "GROUPBY" instead of doing a sort and de-dup 2124083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik Cursor cursor = cr.query(CalendarAlerts.CONTENT_URI, projection, 2125083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik WHERE_RESCHEDULE_MISSED_ALARMS, (new String[] { 2126083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik Long.toString(now), Long.toString(ancient), Long.toString(now) 2127083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik }), SORT_ORDER_ALARMTIME_ASC); 21289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cursor == null) { 21299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 21309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2131cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 2132cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan if (DEBUG) { 2133105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project Log.d(TAG, "missed alarms found: " + cursor.getCount()); 2134105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 21355b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 21369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2137cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan long alarmTime = -1; 2138cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 21399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (cursor.moveToNext()) { 2140cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan long newAlarmTime = cursor.getLong(0); 2141cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan if (alarmTime != newAlarmTime) { 2142cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan if (DEBUG) { 2143cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan Log.w(TAG, "rescheduling missed alarm. alarmTime: " + newAlarmTime); 2144cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan } 2145cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan scheduleAlarm(context, manager, newAlarmTime); 2146cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan alarmTime = newAlarmTime; 2147cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan } 21489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 21509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor.close(); 21519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2152cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan } 2153cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 2154c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2155c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Schedules an alarm intent with the system AlarmManager that will 21563771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * notify listeners when a reminder should be fired. The provider will 21573771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * keep scheduled reminders up to date but apps may use this to 21583771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * implement snooze functionality without modifying the reminders table. 21593771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * Scheduled alarms will generate an intent using 2160083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * {@link #ACTION_EVENT_REMINDER}. TODO Move to provider 2161c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * 2162c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param context A context for referencing system resources 2163c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param manager The AlarmManager to use or null 2164c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @param alarmTime The time to fire the intent in UTC millis since 2165c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * epoch 2166083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 2167c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 2168cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan public static void scheduleAlarm(Context context, AlarmManager manager, long alarmTime) { 2169cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan if (DEBUG) { 2170cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan Time time = new Time(); 2171cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan time.set(alarmTime); 2172cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan String schedTime = time.format(" %a, %b %d, %Y %I:%M%P"); 2173cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan Log.d(TAG, "Schedule alarm at " + alarmTime + " " + schedTime); 2174cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan } 2175cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan 2176cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan if (manager == null) { 2177cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 2178cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan } 21795b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 2180e00d58998cf5e36bbb744e6412623d7f35a15da1RoboErik Intent intent = new Intent(ACTION_EVENT_REMINDER); 2181bec6c36b96f7bc415af18abbb142bd51a1741796RoboErik intent.setData(ContentUris.withAppendedId(CalendarContract.CONTENT_URI, alarmTime)); 21821dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio intent.putExtra(ALARM_TIME, alarmTime); 218342f1957817c3bda0c002e2c987f2a8bbe320f755Erik PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); 2184cdaeafd440e61e1b64fbd46107157f3c74d1c09cMichael Chan manager.set(AlarmManager.RTC_WAKEUP, alarmTime, pi); 21859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21865b387e16f7551921ae7d33b93838a22f370b9a54Ken Shirriff 21879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2188083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * Searches for an entry in the CalendarAlerts table that matches the 2189083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * given event id, begin time and alarm time. If one is found then this 2190083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * alarm already exists and this method returns true. TODO Move to 2191083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * provider 219258644028f909ecb429b26f909bedfb62a153d4e4RoboErik * 21939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr the ContentResolver 21949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventId the event id to match 21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param begin the start time of the event in UTC millis 21969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param alarmTime the alarm time of the event in UTC millis 2197083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @return true if there is already an alarm for the given event with 2198083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * the same start time and alarm time. 2199083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik * @hide 22009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final boolean alarmExists(ContentResolver cr, long eventId, 22029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long begin, long alarmTime) { 22039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: construct an explicit SQL query so that we can add 22049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // "LIMIT 1" to the end and get just one result. 22051dfc8a25182467efde6956fdee4a077a10238f77Fabrice Di Meglio String[] projection = new String[] { ALARM_TIME }; 2206083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik Cursor cursor = cr.query(CONTENT_URI, projection, WHERE_ALARM_EXISTS, 2207083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik (new String[] { 2208083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik Long.toString(eventId), Long.toString(begin), Long.toString(alarmTime) 2209083cd2dfeb4b35b0b888921b02aa28464fa53165RoboErik }), null); 22109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean found = false; 22119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 22129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cursor != null && cursor.getCount() > 0) { 22139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project found = true; 22149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 22169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cursor != null) { 22179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor.close(); 22189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return found; 22219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2224b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface ExtendedPropertiesColumns { 22259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2226c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The event the extended property belongs to. Column name. 22279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: INTEGER (foreign key to the Events table)</P> 22289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String EVENT_ID = "event_id"; 22309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the extended property. This is a uri of the form 2233c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * {scheme}#{local-name} convention. Column name. 22349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 22359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String NAME = "name"; 22379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2239c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The value of the extended property. Column name. 22409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <P>Type: TEXT</P> 22419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String VALUE = "value"; 22439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2245c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2246c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * Fields for accessing the Extended Properties. This is a generic set of 2247c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * name/value pairs for use by sync adapters or apps to add extra 22483771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * information to events. There are three writable columns and all three 22493771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * must be present when inserting a new value. They are: 22503771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <ul> 22513771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #EVENT_ID}</li> 22523771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #NAME}</li> 22533771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * <li>{@link #VALUE}</li> 22543771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * </ul> 2255c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 22569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final class ExtendedProperties implements BaseColumns, 22579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ExtendedPropertiesColumns, EventsColumns { 22589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Uri CONTENT_URI = 2259a69a23b2a5fa7738a5c5c3b74865f20308a96190Ken Shirriff Uri.parse("content://" + AUTHORITY + "/extendedproperties"); 22609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22613672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 22623672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 22633672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 22643672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private ExtendedProperties() {} 22653672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 22669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: fill out this class when we actually start utilizing extendedproperties 22679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // in the calendar application. 22689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2269ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff 2270ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff /** 2271ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff * A table provided for sync adapters to use for storing private sync state data. 2272ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff * 2273ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff * @see SyncStateContract 2274ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff */ 2275ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff public static final class SyncState implements SyncStateContract.Columns { 2276ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff /** 2277ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff * This utility class cannot be instantiated 2278ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff */ 2279ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff private SyncState() {} 2280ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff 2281c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik private static final String CONTENT_DIRECTORY = 2282ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff SyncStateContract.Constants.CONTENT_DIRECTORY; 2283ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff 2284ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff /** 2285ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff * The content:// style URI for this table 2286ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff */ 2287ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff public static final Uri CONTENT_URI = 2288bec6c36b96f7bc415af18abbb142bd51a1741796RoboErik Uri.withAppendedPath(CalendarContract.CONTENT_URI, CONTENT_DIRECTORY); 2289ead4f9cef59647a7f980efa2fdcc8c7e17c8def1Ken Shirriff } 2290505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2291505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2292505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * Columns from the EventsRawTimes table 22933771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * 22943771fcbc192386d96b57d1edec44d53620d9f09dRoboErik * @hide 2295505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2296b2c75603b3ccf2bcfcda66e9dfb835a119f2e5a3RoboErik protected interface EventsRawTimesColumns { 2297505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2298c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The corresponding event id. Column name. 2299505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * <P>Type: INTEGER (long)</P> 2300505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2301505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final String EVENT_ID = "event_id"; 2302505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2303505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2304c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The RFC2445 compliant time the event starts. Column name. 2305505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * <P>Type: TEXT</P> 2306505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2307505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final String DTSTART_2445 = "dtstart2445"; 2308505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2309505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2310c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The RFC2445 compliant time the event ends. Column name. 2311505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * <P>Type: TEXT</P> 2312505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2313505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final String DTEND_2445 = "dtend2445"; 2314505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2315505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2316c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The RFC2445 compliant original instance time of the recurring event 2317c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * for which this event is an exception. Column name. 2318505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * <P>Type: TEXT</P> 2319505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2320505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final String ORIGINAL_INSTANCE_TIME_2445 = "originalInstanceTime2445"; 2321505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2322505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio /** 2323c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * The RFC2445 compliant last date this event repeats on, or NULL if it 2324c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * never ends. Column name. 2325505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio * <P>Type: TEXT</P> 2326505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio */ 2327505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final String LAST_DATE_2445 = "lastDate2445"; 2328505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio } 2329505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio 2330c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik /** 2331c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik * @hide 2332c2d5330c1cc340ec5b23de14481f1db2e21a6c32RoboErik */ 2333505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio public static final class EventsRawTimes implements BaseColumns, EventsRawTimesColumns { 23343672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik 23353672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik /** 23363672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik * This utility class cannot be instantiated 23373672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik */ 23383672696dc542674f8b54f83cd00c616b4a9fd4adRoboErik private EventsRawTimes() {} 2339505635583bf49339a0ec8da00851b2fba2db3478Fabrice Di Meglio } 23409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2341