diff options
Diffstat (limited to 'sdk/src/java/cyanogenmod/alarmclock')
-rw-r--r-- | sdk/src/java/cyanogenmod/alarmclock/ClockContract.java | 314 | ||||
-rw-r--r-- | sdk/src/java/cyanogenmod/alarmclock/CyanogenModAlarmClock.java | 163 |
2 files changed, 477 insertions, 0 deletions
diff --git a/sdk/src/java/cyanogenmod/alarmclock/ClockContract.java b/sdk/src/java/cyanogenmod/alarmclock/ClockContract.java new file mode 100644 index 0000000..63a1d27 --- /dev/null +++ b/sdk/src/java/cyanogenmod/alarmclock/ClockContract.java @@ -0,0 +1,314 @@ +/* + * Copyright (C) 2013 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 cyanogenmod.alarmclock; + +import android.net.Uri; +import android.provider.BaseColumns; + +/** + * <p> + * The contract between the clock provider and desk clock. Contains + * definitions for the supported URIs and data columns. + * </p> + * <h3>Overview</h3> + * <p> + * ClockContract defines the data model of clock related information. + * This data is stored in a number of tables: + * </p> + * <ul> + * <li>The {@link AlarmsColumns} table holds the user created alarms</li> + * <li>The {@link InstancesColumns} table holds the current state of each + * alarm in the AlarmsColumn table. + * </li> + * <li>The {@link CitiesColumns} table holds all user selectable cities</li> + * </ul> + * + * <p> + * Requires {@link cyanogenmod.alarmclock.CyanogenModAlarmClock#READ_ALARMS_PERMISSION} + * to read from the provider. + * Requires {@link cyanogenmod.alarmclock.CyanogenModAlarmClock#WRITE_ALARMS_PERMISSION} to write + * to the provider. + * </p> + */ +public final class ClockContract { + /** + * This authority is used for writing to or querying from the clock + * provider. + */ + public static final String AUTHORITY = "com.android.deskclock"; + + /** + * This utility class cannot be instantiated + */ + private ClockContract() {} + + /** + * Constants for tables with AlarmSettings. + */ + public interface AlarmSettingColumns extends BaseColumns { + /** + * This string is used to indicate no ringtone. + */ + public static final Uri NO_RINGTONE_URI = Uri.EMPTY; + + /** + * This string is used to indicate no ringtone. + */ + public static final String NO_RINGTONE = NO_RINGTONE_URI.toString(); + + /** + * True if alarm should vibrate + * <p>Type: BOOLEAN</p> + */ + public static final String VIBRATE = "vibrate"; + + /** + * Alarm label. + * + * <p>Type: STRING</p> + */ + public static final String LABEL = "label"; + + /** + * Audio alert to play when alarm triggers. Null entry + * means use system default and entry that equal + * Uri.EMPTY.toString() means no ringtone. + * + * <p>Type: STRING</p> + */ + public static final String RINGTONE = "ringtone"; + + /** + * True if alarm should start off quiet and slowly increase volume + * <P>Type: BOOLEAN</P> + */ + public static final String INCREASING_VOLUME = "incvol"; + + /** + * Profile to change to when alarm triggers + * <P>Type: STRING</P> + */ + public static final String PROFILE = "profile"; + } + + /** + * Constants for the Alarms table, which contains the user created alarms. + */ + public interface AlarmsColumns extends AlarmSettingColumns, BaseColumns { + /** + * The content:// style URL for this table. + */ + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/alarms"); + + /** + * Hour in 24-hour localtime 0 - 23. + * <p>Type: INTEGER</p> + */ + public static final String HOUR = "hour"; + + /** + * Minutes in localtime 0 - 59. + * <p>Type: INTEGER</p> + */ + public static final String MINUTES = "minutes"; + + /** + * Days of the week encoded as a bit set. + * <p>Type: INTEGER</p> + * + */ + public static final String DAYS_OF_WEEK = "daysofweek"; + + /** + * True if alarm is active. + * <p>Type: BOOLEAN</p> + */ + public static final String ENABLED = "enabled"; + + /** + * Determine if alarm is deleted after it has been used. + * <p>Type: INTEGER</p> + */ + public static final String DELETE_AFTER_USE = "delete_after_use"; + } + + /** + * Constants for the Instance table, which contains the state of each alarm. + */ + public interface InstancesColumns extends AlarmSettingColumns, BaseColumns { + /** + * The content:// style URL for this table. + */ + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/instances"); + + + /** + * Alarm state for rtc power off alarm + */ + public static final int POWER_OFF_ALARM_STATE = -1; + + /** + * Alarm state when to show no notification. + * + * Can transitions to: + * LOW_NOTIFICATION_STATE + */ + public static final int SILENT_STATE = 0; + + /** + * Alarm state to show low priority alarm notification. + * + * Can transitions to: + * HIDE_NOTIFICATION_STATE + * HIGH_NOTIFICATION_STATE + * DISMISSED_STATE + */ + public static final int LOW_NOTIFICATION_STATE = 1; + + /** + * Alarm state to hide low priority alarm notification. + * + * Can transitions to: + * HIGH_NOTIFICATION_STATE + */ + public static final int HIDE_NOTIFICATION_STATE = 2; + + /** + * Alarm state to show high priority alarm notification. + * + * Can transitions to: + * DISMISSED_STATE + * FIRED_STATE + */ + public static final int HIGH_NOTIFICATION_STATE = 3; + + /** + * Alarm state when alarm is in snooze. + * + * Can transitions to: + * DISMISSED_STATE + * FIRED_STATE + */ + public static final int SNOOZE_STATE = 4; + + /** + * Alarm state when alarm is being fired. + * + * Can transitions to: + * DISMISSED_STATE + * SNOOZED_STATE + * MISSED_STATE + */ + public static final int FIRED_STATE = 5; + + /** + * Alarm state when alarm has been missed. + * + * Can transitions to: + * DISMISSED_STATE + */ + public static final int MISSED_STATE = 6; + + /** + * Alarm state when alarm is done. + */ + public static final int DISMISSED_STATE = 7; + + /** + * Alarm state when alarm has been dismissed before its intended firing time. + */ + public static final int PREDISMISSED_STATE = 8; + + /** + * Alarm year. + * + * <p>Type: INTEGER</p> + */ + public static final String YEAR = "year"; + + /** + * Alarm month in year. + * + * <p>Type: INTEGER</p> + */ + public static final String MONTH = "month"; + + /** + * Alarm day in month. + * + * <p>Type: INTEGER</p> + */ + public static final String DAY = "day"; + + /** + * Alarm hour in 24-hour localtime 0 - 23. + * <p>Type: INTEGER</p> + */ + public static final String HOUR = "hour"; + + /** + * Alarm minutes in localtime 0 - 59 + * <p>Type: INTEGER</p> + */ + public static final String MINUTES = "minutes"; + + /** + * Foreign key to Alarms table + * <p>Type: INTEGER (long)</p> + */ + public static final String ALARM_ID = "alarm_id"; + + /** + * Alarm state + * <p>Type: INTEGER</p> + */ + public static final String ALARM_STATE = "alarm_state"; + } + + /** + * Constants for the Cities table, which contains all selectable cities. + */ + public interface CitiesColumns { + /** + * The content:// style URL for this table. + */ + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/cities"); + + /** + * Primary id for city. + * <p>Type: STRING</p> + */ + public static final String CITY_ID = "city_id"; + + /** + * City name. + * <p>Type: STRING</p> + */ + public static final String CITY_NAME = "city_name"; + + /** + * Timezone name of city. + * <p>Type: STRING</p> + */ + public static final String TIMEZONE_NAME = "timezone_name"; + + /** + * Timezone offset. + * <p>Type: INTEGER</p> + */ + public static final String TIMEZONE_OFFSET = "timezone_offset"; + } +} diff --git a/sdk/src/java/cyanogenmod/alarmclock/CyanogenModAlarmClock.java b/sdk/src/java/cyanogenmod/alarmclock/CyanogenModAlarmClock.java new file mode 100644 index 0000000..76508a9 --- /dev/null +++ b/sdk/src/java/cyanogenmod/alarmclock/CyanogenModAlarmClock.java @@ -0,0 +1,163 @@ +/** + * Copyright (c) 2015, The CyanogenMod 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 cyanogenmod.alarmclock; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.provider.AlarmClock; + +import java.util.List; + +/** + * The CyanogenModAlarmClock class contains utilities for interacting with + * a variety of Alarm features that the CyanogenMod AlarmClock application + * (based on AOSP DeskClock) supports. + */ +public class CyanogenModAlarmClock { + /** + * The package name of the CyanogenMod DeskClock application. + */ + private static final String DESKCLOCK_PACKAGE = "com.android.deskclock"; + + /** + * Allows an application to make modifications to existing alarms, + * such as turning them on or off. + * + * @see #ACTION_SET_ALARM_ENABLED + */ + public static final String MODIFY_ALARMS_PERMISSION + = "cyanogenmod.alarmclock.permission.MODIFY_ALARMS"; + + /** + * Allows an application to have read access to all alarms in the + * CyanogenMod DeskClock application. + * + * @see cyanogenmod.alarmclock.ClockContract + */ + public static final String READ_ALARMS_PERMISSION + = "cyanogenmod.alarmclock.permission.READ_ALARMS"; + + /** + * Allows an application to have write access to all alarms in the + * CyanogenMod DeskClock application. This is a system level permission. + * + * @see cyanogenmod.alarmclock.ClockContract + * @hide + */ + public static final String WRITE_ALARMS_PERMISSION + = "cyanogenmod.alarmclock.permission.WRITE_ALARMS"; + + /** + * Service Action: Set an existing alarm to be either enabled or disabled. + * <p> + * This action sets an alarm to be enabled or disabled. + * </p><p> + * This action requests an alarm with the id specified by {@link #EXTRA_ALARM_ID} + * be set to enabled or disabled, depending on the value set with {@link #EXTRA_ENABLED}. + * </p> + * + * <p>Requires permission {@link #MODIFY_ALARMS_PERMISSION} to launch this + * intent. + * </p> + * + * <p>Always set the package name of the Intent that will launch this action + * to {@link #DESKCLOCK_PACKAGE} explicitly, for security.</p> + * + * <h3>Request parameters</h3> + * <ul> + * <li>{@link #EXTRA_ALARM_ID} <em>(required)</em>: The id of the alarm to modify, + * as stored in {@link cyanogenmod.alarmclock.ClockContract.AlarmsColumns#_ID}</li> + * <li>{@link #EXTRA_ENABLED} <em>(required)</em>: Whether to set this alarm to be enabled + * or disabled. </li> + * </ul> + */ + public static final String ACTION_SET_ALARM_ENABLED + = "cyanogenmod.alarmclock.SET_ALARM_ENABLED"; + + /** + * Bundle extra: The id of the alarm. + * <p> + * Used by {@link #ACTION_SET_ALARM_ENABLED}. + * </p><p> + * This extra is required. + * </p><p> + * The value is an {@link Long} and is the ID stored in + * {@link cyanogenmod.alarmclock.ClockContract.AlarmsColumns#_ID} for this alarm. + * </p> + * + * @see #ACTION_SET_ALARM_ENABLED + * @see #EXTRA_ENABLED + */ + public static final String EXTRA_ALARM_ID = "cyanogenmod.intent.extra.alarmclock.ID"; + + /** + * Bundle extra: Whether to set the alarm to enabled to disabled. + * <p> + * Used by {@link #ACTION_SET_ALARM_ENABLED}. + * </p><p> + * This extra is required. + * </p><p> + * The value is an {@link Boolean} and if true, will set the alarm specified by + * {@link #EXTRA_ALARM_ID} to be enabled. Otherwise, the alarm will be disabled. + * </p> + * + * @see #ACTION_SET_ALARM_ENABLED + * @see #EXTRA_ALARM_ID + */ + public static final String EXTRA_ENABLED = "cyanogenmod.intent.extra.alarmclock.ENABLED"; + + /** + * <p> + * Retrieves an Intent that is prepopulated with the proper action and ComponentName to + * create a new alarm in the CyanogenMod DeskClock application. + * </p> + * <p> The action will be set to {@link android.provider.AlarmClock#ACTION_SET_ALARM}. Use the + * Intent extras contained at {@link android.provider.AlarmClock} to configure the alarm. + * </p> + * <p>Requires permission {@link android.Manifest.permission#SET_ALARM} to launch this + * intent. + * </p> + * + * @see android.provider.AlarmClock#ACTION_SET_ALARM + * @return The Intent to create a new alarm with the CyanogenMod DeskClock application. + */ + public static Intent createAlarmIntent(Context context) { + Intent intent = new Intent(); + intent.setAction(AlarmClock.ACTION_SET_ALARM); + + // Retrieve the ComponentName of the best result + // for ACTION_SET_ALARM within system applications only. + // This will exclude third party alarm apps that have been installed. + PackageManager pm = context.getPackageManager(); + List<ResolveInfo> resolves = pm.queryIntentActivities(intent, 0); + ComponentName selectedSystemComponent = null; + for (ResolveInfo info : resolves) { + if ((info.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { + selectedSystemComponent = new ComponentName(info.activityInfo.packageName, + info.activityInfo.name); + break; + } + } + if (selectedSystemComponent != null) { + intent.setComponent(selectedSystemComponent); + } + return intent; + } +} |