1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.deskclock.provider;
17
18import android.net.Uri;
19import android.provider.BaseColumns;
20
21/**
22 * <p>
23 * The contract between the clock provider and desk clock. Contains
24 * definitions for the supported URIs and data columns.
25 * </p>
26 * <h3>Overview</h3>
27 * <p>
28 * ClockContract defines the data model of clock related information.
29 * This data is stored in a number of tables:
30 * </p>
31 * <ul>
32 * <li>The {@link AlarmsColumns} table holds the user created alarms</li>
33 * <li>The {@link InstancesColumns} table holds the current state of each
34 * alarm in the AlarmsColumn table.
35 * </li>
36 * <li>The {@link CitiesColumns} table holds all user selectable cities</li>
37 * </ul>
38 */
39public final class ClockContract {
40    /**
41     * This authority is used for writing to or querying from the clock
42     * provider.
43     */
44    public static final String AUTHORITY = "com.android.deskclock";
45
46    /**
47     * This utility class cannot be instantiated
48     */
49    private ClockContract() {}
50
51    /**
52     * Constants for tables with AlarmSettings.
53     */
54    private interface AlarmSettingColumns extends BaseColumns {
55        /**
56         * This string is used to indicate no ringtone.
57         */
58        public static final Uri NO_RINGTONE_URI = Uri.EMPTY;
59
60        /**
61         * This string is used to indicate no ringtone.
62         */
63        public static final String NO_RINGTONE = NO_RINGTONE_URI.toString();
64
65        /**
66         * True if alarm should vibrate
67         * <p>Type: BOOLEAN</p>
68         */
69        public static final String VIBRATE = "vibrate";
70
71        /**
72         * Alarm label.
73         *
74         * <p>Type: STRING</p>
75         */
76        public static final String LABEL = "label";
77
78        /**
79         * Audio alert to play when alarm triggers. Null entry
80         * means use system default and entry that equal
81         * Uri.EMPTY.toString() means no ringtone.
82         *
83         * <p>Type: STRING</p>
84         */
85        public static final String RINGTONE = "ringtone";
86    }
87
88    /**
89     * Constants for the Alarms table, which contains the user created alarms.
90     */
91    protected interface AlarmsColumns extends AlarmSettingColumns, BaseColumns {
92        /**
93         * The content:// style URL for this table.
94         */
95        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/alarms");
96
97        /**
98         * Hour in 24-hour localtime 0 - 23.
99         * <p>Type: INTEGER</p>
100         */
101        public static final String HOUR = "hour";
102
103        /**
104         * Minutes in localtime 0 - 59.
105         * <p>Type: INTEGER</p>
106         */
107        public static final String MINUTES = "minutes";
108
109        /**
110         * Days of the week encoded as a bit set.
111         * <p>Type: INTEGER</p>
112         *
113         * {@link DaysOfWeek}
114         */
115        public static final String DAYS_OF_WEEK = "daysofweek";
116
117        /**
118         * True if alarm is active.
119         * <p>Type: BOOLEAN</p>
120         */
121        public static final String ENABLED = "enabled";
122
123        /**
124         * Determine if alarm is deleted after it has been used.
125         * <p>Type: INTEGER</p>
126         */
127        public static final String DELETE_AFTER_USE = "delete_after_use";
128    }
129
130    /**
131     * Constants for the Instance table, which contains the state of each alarm.
132     */
133    protected interface InstancesColumns extends AlarmSettingColumns, BaseColumns {
134        /**
135         * The content:// style URL for this table.
136         */
137        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/instances");
138
139        /**
140         * Alarm state when to show no notification.
141         *
142         * Can transitions to:
143         * LOW_NOTIFICATION_STATE
144         */
145        public static final int SILENT_STATE = 0;
146
147        /**
148         * Alarm state to show low priority alarm notification.
149         *
150         * Can transitions to:
151         * HIDE_NOTIFICATION_STATE
152         * HIGH_NOTIFICATION_STATE
153         * DISMISSED_STATE
154         */
155        public static final int LOW_NOTIFICATION_STATE = 1;
156
157        /**
158         * Alarm state to hide low priority alarm notification.
159         *
160         * Can transitions to:
161         * HIGH_NOTIFICATION_STATE
162         */
163        public static final int HIDE_NOTIFICATION_STATE = 2;
164
165        /**
166         * Alarm state to show high priority alarm notification.
167         *
168         * Can transitions to:
169         * DISMISSED_STATE
170         * FIRED_STATE
171         */
172        public static final int HIGH_NOTIFICATION_STATE = 3;
173
174        /**
175         * Alarm state when alarm is in snooze.
176         *
177         * Can transitions to:
178         * DISMISSED_STATE
179         * FIRED_STATE
180         */
181        public static final int SNOOZE_STATE = 4;
182
183        /**
184         * Alarm state when alarm is being fired.
185         *
186         * Can transitions to:
187         * DISMISSED_STATE
188         * SNOOZED_STATE
189         * MISSED_STATE
190         */
191        public static final int FIRED_STATE = 5;
192
193        /**
194         * Alarm state when alarm has been missed.
195         *
196         * Can transitions to:
197         * DISMISSED_STATE
198         */
199        public static final int MISSED_STATE = 6;
200
201        /**
202         * Alarm state when alarm is done.
203         */
204        public static final int DISMISSED_STATE = 7;
205
206        /**
207         * Alarm year.
208         *
209         * <p>Type: INTEGER</p>
210         */
211        public static final String YEAR = "year";
212
213        /**
214         * Alarm month in year.
215         *
216         * <p>Type: INTEGER</p>
217         */
218        public static final String MONTH = "month";
219
220        /**
221         * Alarm day in month.
222         *
223         * <p>Type: INTEGER</p>
224         */
225        public static final String DAY = "day";
226
227        /**
228         * Alarm hour in 24-hour localtime 0 - 23.
229         * <p>Type: INTEGER</p>
230         */
231        public static final String HOUR = "hour";
232
233        /**
234         * Alarm minutes in localtime 0 - 59
235         * <p>Type: INTEGER</p>
236         */
237        public static final String MINUTES = "minutes";
238
239        /**
240         * Foreign key to Alarms table
241         * <p>Type: INTEGER (long)</p>
242         */
243        public static final String ALARM_ID = "alarm_id";
244
245        /**
246         * Alarm state
247         * <p>Type: INTEGER</p>
248         */
249        public static final String ALARM_STATE = "alarm_state";
250    }
251
252    /**
253     * Constants for the Cities table, which contains all selectable cities.
254     */
255    protected interface CitiesColumns {
256        /**
257         * The content:// style URL for this table.
258         */
259        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/cities");
260
261        /**
262         * Primary id for city.
263         * <p>Type: STRING</p>
264         */
265        public static final String CITY_ID = "city_id";
266
267        /**
268         * City name.
269         * <p>Type: STRING</p>
270         */
271        public static final String CITY_NAME = "city_name";
272
273        /**
274         * Timezone name of city.
275         * <p>Type: STRING</p>
276         */
277        public static final String TIMEZONE_NAME = "timezone_name";
278
279        /**
280         * Timezone offset.
281         * <p>Type: INTEGER</p>
282         */
283        public static final String TIMEZONE_OFFSET = "timezone_offset";
284    }
285}
286