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 import com.android.deskclock.BuildConfig;
22 
23 /**
24  * <p>
25  * The contract between the clock provider and desk clock. Contains
26  * definitions for the supported URIs and data columns.
27  * </p>
28  * <h3>Overview</h3>
29  * <p>
30  * ClockContract defines the data model of clock related information.
31  * This data is stored in a number of tables:
32  * </p>
33  * <ul>
34  * <li>The {@link AlarmsColumns} table holds the user created alarms</li>
35  * <li>The {@link InstancesColumns} table holds the current state of each
36  * alarm in the AlarmsColumn table.
37  * </li>
38  * </ul>
39  */
40 public final class ClockContract {
41     /**
42      * This authority is used for writing to or querying from the clock
43      * provider.
44      */
45     public static final String AUTHORITY = BuildConfig.APPLICATION_ID;
46 
47     /**
48      * This utility class cannot be instantiated
49      */
ClockContract()50     private ClockContract() {}
51 
52     /**
53      * Constants for tables with AlarmSettings.
54      */
55     private interface AlarmSettingColumns extends BaseColumns {
56         /**
57          * This string is used to indicate no ringtone.
58          */
59         Uri NO_RINGTONE_URI = Uri.EMPTY;
60 
61         /**
62          * This string is used to indicate no ringtone.
63          */
64         String NO_RINGTONE = NO_RINGTONE_URI.toString();
65 
66         /**
67          * True if alarm should vibrate
68          * <p>Type: BOOLEAN</p>
69          */
70         String VIBRATE = "vibrate";
71 
72         /**
73          * Alarm label.
74          *
75          * <p>Type: STRING</p>
76          */
77         String LABEL = "label";
78 
79         /**
80          * Audio alert to play when alarm triggers. Null entry
81          * means use system default and entry that equal
82          * Uri.EMPTY.toString() means no ringtone.
83          *
84          * <p>Type: STRING</p>
85          */
86         String RINGTONE = "ringtone";
87     }
88 
89     /**
90      * Constants for the Alarms table, which contains the user created alarms.
91      */
92     protected interface AlarmsColumns extends AlarmSettingColumns, BaseColumns {
93         /**
94          * The content:// style URL for this table.
95          */
96         Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/alarms");
97 
98         /**
99          * The content:// style URL for the alarms with instance tables, which is used to get the
100          * next firing instance and the current state of an alarm.
101          */
102         Uri ALARMS_WITH_INSTANCES_URI = Uri.parse("content://" + AUTHORITY
103                 + "/alarms_with_instances");
104 
105         /**
106          * Hour in 24-hour localtime 0 - 23.
107          * <p>Type: INTEGER</p>
108          */
109         String HOUR = "hour";
110 
111         /**
112          * Minutes in localtime 0 - 59.
113          * <p>Type: INTEGER</p>
114          */
115         String MINUTES = "minutes";
116 
117         /**
118          * Days of the week encoded as a bit set.
119          * <p>Type: INTEGER</p>
120          *
121          * {@link com.android.deskclock.data.Weekdays}
122          */
123         String DAYS_OF_WEEK = "daysofweek";
124 
125         /**
126          * True if alarm is active.
127          * <p>Type: BOOLEAN</p>
128          */
129         String ENABLED = "enabled";
130 
131         /**
132          * Determine if alarm is deleted after it has been used.
133          * <p>Type: INTEGER</p>
134          */
135         String DELETE_AFTER_USE = "delete_after_use";
136     }
137 
138     /**
139      * Constants for the Instance table, which contains the state of each alarm.
140      */
141     protected interface InstancesColumns extends AlarmSettingColumns, BaseColumns {
142         /**
143          * The content:// style URL for this table.
144          */
145         Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/instances");
146 
147         /**
148          * Alarm state when to show no notification.
149          *
150          * Can transitions to:
151          * LOW_NOTIFICATION_STATE
152          */
153         int SILENT_STATE = 0;
154 
155         /**
156          * Alarm state to show low priority alarm notification.
157          *
158          * Can transitions to:
159          * HIDE_NOTIFICATION_STATE
160          * HIGH_NOTIFICATION_STATE
161          * DISMISSED_STATE
162          */
163         int LOW_NOTIFICATION_STATE = 1;
164 
165         /**
166          * Alarm state to hide low priority alarm notification.
167          *
168          * Can transitions to:
169          * HIGH_NOTIFICATION_STATE
170          */
171         int HIDE_NOTIFICATION_STATE = 2;
172 
173         /**
174          * Alarm state to show high priority alarm notification.
175          *
176          * Can transitions to:
177          * DISMISSED_STATE
178          * FIRED_STATE
179          */
180         int HIGH_NOTIFICATION_STATE = 3;
181 
182         /**
183          * Alarm state when alarm is in snooze.
184          *
185          * Can transitions to:
186          * DISMISSED_STATE
187          * FIRED_STATE
188          */
189         int SNOOZE_STATE = 4;
190 
191         /**
192          * Alarm state when alarm is being fired.
193          *
194          * Can transitions to:
195          * DISMISSED_STATE
196          * SNOOZED_STATE
197          * MISSED_STATE
198          */
199         int FIRED_STATE = 5;
200 
201         /**
202          * Alarm state when alarm has been missed.
203          *
204          * Can transitions to:
205          * DISMISSED_STATE
206          */
207         int MISSED_STATE = 6;
208 
209         /**
210          * Alarm state when alarm is done.
211          */
212         int DISMISSED_STATE = 7;
213 
214         /**
215          * Alarm state when alarm has been dismissed before its intended firing time.
216          */
217         int PREDISMISSED_STATE = 8;
218 
219         /**
220          * Alarm year.
221          *
222          * <p>Type: INTEGER</p>
223          */
224         String YEAR = "year";
225 
226         /**
227          * Alarm month in year.
228          *
229          * <p>Type: INTEGER</p>
230          */
231         String MONTH = "month";
232 
233         /**
234          * Alarm day in month.
235          *
236          * <p>Type: INTEGER</p>
237          */
238         String DAY = "day";
239 
240         /**
241          * Alarm hour in 24-hour localtime 0 - 23.
242          * <p>Type: INTEGER</p>
243          */
244         String HOUR = "hour";
245 
246         /**
247          * Alarm minutes in localtime 0 - 59
248          * <p>Type: INTEGER</p>
249          */
250         String MINUTES = "minutes";
251 
252         /**
253          * Foreign key to Alarms table
254          * <p>Type: INTEGER (long)</p>
255          */
256         String ALARM_ID = "alarm_id";
257 
258         /**
259          * Alarm state
260          * <p>Type: INTEGER</p>
261          */
262         String ALARM_STATE = "alarm_state";
263     }
264 }
265