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