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  */
16 package com.android.deskclock.provider;
17 
18 import android.net.Uri;
19 import 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  */
39 public 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      */
ClockContract()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