summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-11-12 05:40:00 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-11-12 05:40:00 -0800
commitbafd4638a5f7f5ea1663e13caee2e1e7ae7e75c9 (patch)
tree46318426051e19fedd74f909fdad780f4566bb5e
parent0c4449d6fd421c916ebaf9657ff6ae5a21eed2e7 (diff)
parentc7edd6ea840e25cb04d090b6c29dc96c04d2be40 (diff)
downloadandroid_packages_apps_DeskClock-bafd4638a5f7f5ea1663e13caee2e1e7ae7e75c9.tar.gz
android_packages_apps_DeskClock-bafd4638a5f7f5ea1663e13caee2e1e7ae7e75c9.tar.bz2
android_packages_apps_DeskClock-bafd4638a5f7f5ea1663e13caee2e1e7ae7e75c9.zip
Merge change Ic7edd6ea into eclair
* changes: Cancel the snooze if the user sets an alarm for before the snooze fires.
-rw-r--r--src/com/android/deskclock/Alarms.java40
-rw-r--r--src/com/android/deskclock/SetAlarm.java28
2 files changed, 49 insertions, 19 deletions
diff --git a/src/com/android/deskclock/Alarms.java b/src/com/android/deskclock/Alarms.java
index b6a22f4f7..ebb337b48 100644
--- a/src/com/android/deskclock/Alarms.java
+++ b/src/com/android/deskclock/Alarms.java
@@ -17,6 +17,7 @@
package com.android.deskclock;
import android.app.AlarmManager;
+import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.ContentValues;
@@ -157,8 +158,9 @@ public class Alarms {
* @param vibrate corresponds to the VIBRATE column
* @param message corresponds to the MESSAGE column
* @param alert corresponds to the ALERT column
+ * @return Time when the alarm will fire.
*/
- public static void setAlarm(
+ public static long setAlarm(
Context context, int id, boolean enabled, int hour, int minutes,
Alarm.DaysOfWeek daysOfWeek, boolean vibrate, String message,
String alert) {
@@ -187,7 +189,23 @@ public class Alarms {
resolver.update(ContentUris.withAppendedId(Alarm.Columns.CONTENT_URI, id),
values, null, null);
+ long timeInMillis =
+ calculateAlarm(hour, minutes, daysOfWeek).getTimeInMillis();
+
+ if (enabled) {
+ // If this alarm fires before the next snooze, clear the snooze to
+ // enable this alarm.
+ SharedPreferences prefs = context.getSharedPreferences(
+ AlarmClock.PREFERENCES, 0);
+ long snoozeTime = prefs.getLong(PREF_SNOOZE_TIME, 0);
+ if (timeInMillis < snoozeTime) {
+ clearSnoozePreference(context, prefs);
+ }
+ }
+
setNextAlert(context);
+
+ return timeInMillis;
}
/**
@@ -367,10 +385,10 @@ public class Alarms {
final long time) {
SharedPreferences prefs = context.getSharedPreferences(
AlarmClock.PREFERENCES, 0);
- SharedPreferences.Editor ed = prefs.edit();
if (id == -1) {
- clearSnoozePreference(ed);
+ clearSnoozePreference(context, prefs);
} else {
+ SharedPreferences.Editor ed = prefs.edit();
ed.putInt(PREF_SNOOZE_ID, id);
ed.putLong(PREF_SNOOZE_TIME, time);
ed.commit();
@@ -391,13 +409,23 @@ public class Alarms {
return;
} else if (snoozeId == id) {
// This is the same id so clear the shared prefs.
- clearSnoozePreference(prefs.edit());
+ clearSnoozePreference(context, prefs);
}
}
// Helper to remove the snooze preference. Do not use clear because that
- // will erase the clock preferences.
- private static void clearSnoozePreference(final SharedPreferences.Editor ed) {
+ // will erase the clock preferences. Also clear the snooze notification in
+ // the window shade.
+ private static void clearSnoozePreference(final Context context,
+ final SharedPreferences prefs) {
+ final int alarmId = prefs.getInt(PREF_SNOOZE_ID, -1);
+ if (alarmId != -1) {
+ NotificationManager nm = (NotificationManager)
+ context.getSystemService(Context.NOTIFICATION_SERVICE);
+ nm.cancel(alarmId);
+ }
+
+ final SharedPreferences.Editor ed = prefs.edit();
ed.remove(PREF_SNOOZE_ID);
ed.remove(PREF_SNOOZE_TIME);
ed.commit();
diff --git a/src/com/android/deskclock/SetAlarm.java b/src/com/android/deskclock/SetAlarm.java
index 1acc1d790..7d84bb493 100644
--- a/src/com/android/deskclock/SetAlarm.java
+++ b/src/com/android/deskclock/SetAlarm.java
@@ -187,19 +187,19 @@ public class SetAlarm extends PreferenceActivity
private void saveAlarm() {
final String alert = mAlarmPref.getAlertString();
- Alarms.setAlarm(this, mId, mEnabled, mHour, mMinutes,
+ long time = Alarms.setAlarm(this, mId, mEnabled, mHour, mMinutes,
mRepeatPref.getDaysOfWeek(), mVibratePref.isChecked(),
mLabel.getText(), alert);
if (mEnabled) {
- popAlarmSetToast(this, mHour, mMinutes,
- mRepeatPref.getDaysOfWeek());
+ popAlarmSetToast(this, time);
}
}
/**
* Write alarm out to persistent store and pops toast if alarm
- * enabled
+ * enabled.
+ * Used only in test code.
*/
private static void saveAlarm(
Context context, int id, boolean enabled, int hour, int minute,
@@ -209,11 +209,11 @@ public class SetAlarm extends PreferenceActivity
+ " " + hour + " " + minute + " vibe " + vibrate);
// Fix alert string first
- Alarms.setAlarm(context, id, enabled, hour, minute, daysOfWeek, vibrate,
- label, alert);
+ long time = Alarms.setAlarm(context, id, enabled, hour, minute,
+ daysOfWeek, vibrate, label, alert);
if (enabled && popToast) {
- popAlarmSetToast(context, hour, minute, daysOfWeek);
+ popAlarmSetToast(context, time);
}
}
@@ -223,8 +223,13 @@ public class SetAlarm extends PreferenceActivity
*/
static void popAlarmSetToast(Context context, int hour, int minute,
Alarm.DaysOfWeek daysOfWeek) {
+ popAlarmSetToast(context,
+ Alarms.calculateAlarm(hour, minute, daysOfWeek)
+ .getTimeInMillis());
+ }
- String toastText = formatToast(context, hour, minute, daysOfWeek);
+ private static void popAlarmSetToast(Context context, long timeInMillis) {
+ String toastText = formatToast(context, timeInMillis);
Toast toast = Toast.makeText(context, toastText, Toast.LENGTH_LONG);
ToastMaster.setToast(toast);
toast.show();
@@ -234,11 +239,8 @@ public class SetAlarm extends PreferenceActivity
* format "Alarm set for 2 days 7 hours and 53 minutes from
* now"
*/
- static String formatToast(Context context, int hour, int minute,
- Alarm.DaysOfWeek daysOfWeek) {
- long alarm = Alarms.calculateAlarm(hour, minute,
- daysOfWeek).getTimeInMillis();
- long delta = alarm - System.currentTimeMillis();;
+ static String formatToast(Context context, long timeInMillis) {
+ long delta = timeInMillis - System.currentTimeMillis();
long hours = delta / (1000 * 60 * 60);
long minutes = delta / (1000 * 60) % 60;
long days = hours / 24;