summaryrefslogtreecommitdiffstats
path: root/core/java/android/provider/AlarmClock.java
blob: 724d76d8bcbd0a3ff6b40f32074fdd3f7bca16ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.provider;

import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;

/**
 * The AlarmClock provider contains an Intent action and extras that can be used
 * to start an Activity to set a new alarm or timer in an alarm clock application.
 *
 * Applications that wish to receive the ACTION_SET_ALARM  and ACTION_SET_TIMER Intents
 * should create an activity to handle the Intent that requires the permission
 * com.android.alarm.permission.SET_ALARM.  Applications that wish to create a
 * new alarm or timer should use
 * {@link android.content.Context#startActivity Context.startActivity()} so that
 * the user has the option of choosing which alarm clock application to use.
 */
public final class AlarmClock {
    /**
     * Activity Action: Set an alarm.
     * <p>
     * Activates an existing alarm or creates a new one.
     * </p><p>
     * This action requests an alarm to be set for a given time of day. If no time of day is
     * specified, an implementation should start an activity that is capable of setting an alarm
     * ({@link #EXTRA_SKIP_UI} is ignored in this case). If a time of day is specified, and
     * {@link #EXTRA_SKIP_UI} is {@code true}, and the alarm is not repeating, the implementation
     * should remove this alarm after it has been dismissed. If an identical alarm exists matching
     * all parameters, the implementation may re-use it instead of creating a new one (in this case,
     * the alarm should not be removed after dismissal).
     *
     * This action always enables the alarm.
     * </p>
     * <h3>Request parameters</h3>
     * <ul>
     * <li>{@link #EXTRA_HOUR} <em>(optional)</em>: The hour of the alarm being set.
     * <li>{@link #EXTRA_MINUTES} <em>(optional)</em>: The minutes of the alarm being set.
     * <li>{@link #EXTRA_DAYS} <em>(optional)</em>: Weekdays for repeating alarm.
     * <li>{@link #EXTRA_MESSAGE} <em>(optional)</em>: A custom message for the alarm.
     * <li>{@link #EXTRA_RINGTONE} <em>(optional)</em>: A ringtone to play with this alarm.
     * <li>{@link #EXTRA_VIBRATE} <em>(optional)</em>: Whether or not to activate the device
     * vibrator for this alarm.
     * <li>{@link #EXTRA_SKIP_UI} <em>(optional)</em>: Whether or not to display an activity for
     * setting this alarm.
     * </ul>
     */
    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    public static final String ACTION_SET_ALARM = "android.intent.action.SET_ALARM";

    /**
     * Activity Action: Set a timer.
     * <p>
     * Activates an existing timer or creates a new one.
     * </p><p>
     * This action requests a timer to be started for a specific {@link #EXTRA_LENGTH length} of
     * time. If no {@link #EXTRA_LENGTH length} is specified, the implementation should start an
     * activity that is capable of setting a timer ({@link #EXTRA_SKIP_UI} is ignored in this case).
     * If a {@link #EXTRA_LENGTH length} is specified, and {@link #EXTRA_SKIP_UI} is {@code true},
     * the implementation should remove this timer after it has been dismissed. If an identical,
     * unused timer exists matching both parameters, an implementation may re-use it instead of
     * creating a new one (in this case, the timer should not be removed after dismissal).
     *
     * This action always starts the timer.
     * </p>
     *
     * <h3>Request parameters</h3>
     * <ul>
     * <li>{@link #EXTRA_LENGTH} <em>(optional)</em>: The length of the timer being set.
     * <li>{@link #EXTRA_MESSAGE} <em>(optional)</em>: A custom message for the timer.
     * <li>{@link #EXTRA_SKIP_UI} <em>(optional)</em>: Whether or not to display an activity for
     * setting this timer.
     * </ul>
     */
    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    public static final String ACTION_SET_TIMER = "android.intent.action.SET_TIMER";

    /**
     * Activity Action: Show the alarms.
     * <p>
     * This action opens the alarms page.
     * </p>
     */
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String ACTION_SHOW_ALARMS = "android.intent.action.SHOW_ALARMS";

    /**
     * Bundle extra: Weekdays for repeating alarm.
     * <p>
     * Used by {@link #ACTION_SET_ALARM}.
     * </p><p>
     * The value is an {@code ArrayList<Integer>}. Each item can be:
     * </p>
     * <ul>
     * <li> {@link java.util.Calendar#SUNDAY},
     * <li> {@link java.util.Calendar#MONDAY},
     * <li> {@link java.util.Calendar#TUESDAY},
     * <li> {@link java.util.Calendar#WEDNESDAY},
     * <li> {@link java.util.Calendar#THURSDAY},
     * <li> {@link java.util.Calendar#FRIDAY},
     * <li> {@link java.util.Calendar#SATURDAY}
     * </ul>
     */
    public static final String EXTRA_DAYS = "android.intent.extra.alarm.DAYS";

    /**
     * Bundle extra: The hour of the alarm.
     * <p>
     * Used by {@link #ACTION_SET_ALARM}.
     * </p><p>
     * This extra is optional. If not provided, an implementation should open an activity
     * that allows a user to set an alarm with user provided time.
     * </p><p>
     * The value is an {@link Integer} and ranges from 0 to 23.
     * </p>
     *
     * @see #ACTION_SET_ALARM
     * @see #EXTRA_MINUTES
     * @see #EXTRA_DAYS
     */
    public static final String EXTRA_HOUR = "android.intent.extra.alarm.HOUR";

    /**
     * Bundle extra: The length of the timer in seconds.
     * <p>
     * Used by {@link #ACTION_SET_TIMER}.
     * </p><p>
     * This extra is optional. If not provided, an implementation should open an activity
     * that allows a user to set a timer with user provided length.
     * </p><p>
     * The value is an {@link Integer} and ranges from 1 to 86400 (24 hours).
     * </p>
     *
     * @see #ACTION_SET_TIMER
     */
    public static final String EXTRA_LENGTH = "android.intent.extra.alarm.LENGTH";

    /**
     * Bundle extra: A custom message for the alarm or timer.
     * <p>
     * Used by {@link #ACTION_SET_ALARM} and {@link #ACTION_SET_TIMER}.
     * </p><p>
     * The value is a {@link String}.
     * </p>
     *
     * @see #ACTION_SET_ALARM
     * @see #ACTION_SET_TIMER
     */
    public static final String EXTRA_MESSAGE = "android.intent.extra.alarm.MESSAGE";

    /**
     * Bundle extra: The minutes of the alarm.
     * <p>
     * Used by {@link #ACTION_SET_ALARM}.
     * </p><p>
     * The value is an {@link Integer} and ranges from 0 to 59. If not provided, it defaults to 0.
     * </p>
     *
     * @see #ACTION_SET_ALARM
     * @see #EXTRA_HOUR
     * @see #EXTRA_DAYS
     */
    public static final String EXTRA_MINUTES = "android.intent.extra.alarm.MINUTES";

    /**
     * Bundle extra: A ringtone to be played with this alarm.
     * <p>
     * Used by {@link #ACTION_SET_ALARM}.
     * </p><p>
     * This value is a {@link String} and can either be set to {@link #VALUE_RINGTONE_SILENT} or
     * to a content URI of the media to be played. If not specified or the URI doesn't exist,
     * {@code "content://settings/system/alarm_alert} will be used.
     * </p>
     *
     * @see #ACTION_SET_ALARM
     * @see #VALUE_RINGTONE_SILENT
     * @see #EXTRA_VIBRATE
     */
    public static final String EXTRA_RINGTONE = "android.intent.extra.alarm.RINGTONE";

    /**
     * Bundle extra: Whether or not to display an activity after performing the action.
     * <p>
     * Used by {@link #ACTION_SET_ALARM} and {@link #ACTION_SET_TIMER}.
     * </p><p>
     * If true, the application is asked to bypass any intermediate UI. If false, the application
     * may display intermediate UI like a confirmation dialog or settings.
     * </p><p>
     * The value is a {@link Boolean}. The default is {@code false}.
     * </p>
     *
     * @see #ACTION_SET_ALARM
     * @see #ACTION_SET_TIMER
     */
    public static final String EXTRA_SKIP_UI = "android.intent.extra.alarm.SKIP_UI";

    /**
     * Bundle extra: Whether or not to activate the device vibrator.
     * <p>
     * Used by {@link #ACTION_SET_ALARM}.
     * </p><p>
     * The value is a {@link Boolean}. The default is {@code true}.
     * </p>
     *
     * @see #ACTION_SET_ALARM
     * @see #EXTRA_RINGTONE
     * @see #VALUE_RINGTONE_SILENT
     */
    public static final String EXTRA_VIBRATE = "android.intent.extra.alarm.VIBRATE";

    /**
     * Bundle extra value: Indicates no ringtone should be played.
     * <p>
     * Used by {@link #ACTION_SET_ALARM}, passed in through {@link #EXTRA_RINGTONE}.
     * </p>
     *
     * @see #ACTION_SET_ALARM
     * @see #EXTRA_RINGTONE
     * @see #EXTRA_VIBRATE
     */
    public static final String VALUE_RINGTONE_SILENT = "silent";
}