Loading src/com/android/deskclock/AlarmClockFragment.java +9 −4 Original line number Diff line number Diff line Loading @@ -625,18 +625,23 @@ public class AlarmClockFragment extends DeskClockFragment implements private void launchRingTonePicker(Alarm alarm) { mSelectedAlarm = alarm; Uri oldRingtone = Alarm.NO_RINGTONE_URI.equals(alarm.alert) ? null : alarm.alert; final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, alarm.alert); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, oldRingtone); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false); startActivityForResult(intent, REQUEST_CODE_RINGTONE); } private void saveRingtoneUri(Intent intent) { final Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); if (uri == null) { uri = Alarm.NO_RINGTONE_URI; } mSelectedAlarm.alert = uri; // Save the last selected ringtone as the default for new alarms if (uri != null) { if (!Alarm.NO_RINGTONE_URI.equals(uri)) { RingtoneManager.setActualDefaultRingtoneUri( getActivity(), RingtoneManager.TYPE_ALARM, uri); } Loading Loading @@ -1252,7 +1257,7 @@ public class AlarmClockFragment extends DeskClockFragment implements }); final String ringtone; if (alarm.alert == null) { if (Alarm.NO_RINGTONE_URI.equals(alarm.alert)) { ringtone = mContext.getResources().getString(R.string.silent_alarm_summary); } else { ringtone = getRingToneTitle(alarm.alert); Loading src/com/android/deskclock/DeskClock.java +5 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.view.View.OnTouchListener; import android.widget.PopupMenu; import android.widget.TextView; import com.android.deskclock.alarms.AlarmStateManager; import com.android.deskclock.provider.Alarm; import com.android.deskclock.stopwatch.StopwatchFragment; import com.android.deskclock.stopwatch.StopwatchService; Loading Loading @@ -175,6 +176,10 @@ public class DeskClock extends Activity implements LabelDialogFragment.TimerLabe } initViews(); setHomeTimeZone(); // We need to update the system next alarm time on app startup because the // user might have clear our data. AlarmStateManager.updateNextAlarm(this); } @Override Loading src/com/android/deskclock/alarms/AlarmNotifications.java +8 −12 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ public final class AlarmNotifications { // Setup content action if instance is owned by alarm long alarmId = instance.mAlarmId == null ? Alarm.INVALID_ID : instance.mAlarmId; Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, instance.mAlarmId); Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, alarmId); viewAlarmIntent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX); viewAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); notification.setContentIntent(PendingIntent.getActivity(context, instance.hashCode(), Loading Loading @@ -118,7 +118,7 @@ public final class AlarmNotifications { // Setup content action if instance is owned by alarm long alarmId = instance.mAlarmId == null ? Alarm.INVALID_ID : instance.mAlarmId; Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, instance.mAlarmId); Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, alarmId); viewAlarmIntent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX); viewAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); notification.setContentIntent(PendingIntent.getActivity(context, instance.hashCode(), Loading Loading @@ -175,9 +175,7 @@ public final class AlarmNotifications { .setContentTitle(context.getString(R.string.alarm_missed_title)) .setContentText(contextText) .setSmallIcon(R.drawable.stat_notify_alarm) .setAutoCancel(true) .setPriority(Notification.PRIORITY_HIGH) .setDefaults(Notification.DEFAULT_ALL); .setPriority(Notification.PRIORITY_HIGH); // Setup dismiss intent Intent dismissIntent = AlarmStateManager.createStateChangeIntent(context, "DISMISS_TAG", Loading @@ -186,13 +184,11 @@ public final class AlarmNotifications { dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT)); // Setup content intent long alarmId = instance.mAlarmId == null ? Alarm.INVALID_ID : instance.mAlarmId; Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, alarmId); viewAlarmIntent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX); viewAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(viewAlarmIntent); notification.setContentIntent(PendingIntent.getActivity(context, instance.hashCode(), viewAlarmIntent, PendingIntent.FLAG_UPDATE_CURRENT)); Intent showAndDismiss = AlarmInstance.createIntent(context, AlarmStateManager.class, instance.mId); showAndDismiss.setAction(AlarmStateManager.SHOW_AND_DISMISS_ALARM_ACTION); notification.setContentIntent(PendingIntent.getBroadcast(context, instance.hashCode(), showAndDismiss, PendingIntent.FLAG_UPDATE_CURRENT)); nm.cancel(instance.hashCode()); nm.notify(instance.hashCode(), notification.build()); Loading src/com/android/deskclock/alarms/AlarmStateManager.java +24 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.preference.PreferenceManager; import com.android.deskclock.AlarmAlertWakeLock; import com.android.deskclock.AlarmUtils; import com.android.deskclock.AsyncHandler; import com.android.deskclock.DeskClock; import com.android.deskclock.Log; import com.android.deskclock.SettingsActivity; import com.android.deskclock.Utils; Loading @@ -44,6 +45,9 @@ public final class AlarmStateManager extends BroadcastReceiver { // Intent action to trigger an instance state change. public static final String CHANGE_STATE_ACTION = "change_state"; // Intent action to show the alarm and dismiss the instance public static final String SHOW_AND_DISMISS_ALARM_ACTION = "show_and_dismiss_alarm"; // Extra key to set the desired state change. public static final String ALARM_STATE_EXTRA = "intent.extra.alarm.state"; Loading Loading @@ -416,6 +420,15 @@ public final class AlarmStateManager extends BroadcastReceiver { if (currentTime.after(missedTTL)) { // Alarm is so old, don't even show missed alarm setDismissState(context, instance); } else if (instance.mAlarmState == AlarmInstance.MISSED_STATE) { // Don't allow MISSED alarms to re-activate if (currentTime.before(alarmTime)) { // Get rid of the missed notification if the alarm time would be in // the future due to timezone changes setDismissState(context, instance); } else { setMissedState(context, instance); } } else if (currentTime.after(alarmTime)) { if (currentTime.before(timeoutTime)) { setFiredState(context, instance); Loading Loading @@ -536,6 +549,17 @@ public final class AlarmStateManager extends BroadcastReceiver { } else { registerInstance(context, instance, true); } } else if (SHOW_AND_DISMISS_ALARM_ACTION.equals(action)) { Uri uri = intent.getData(); AlarmInstance instance = AlarmInstance.getInstance(context.getContentResolver(), AlarmInstance.getId(uri)); long alarmId = instance.mAlarmId == null ? Alarm.INVALID_ID : instance.mAlarmId; Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, alarmId); viewAlarmIntent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX); viewAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(viewAlarmIntent); setDismissState(context, instance); } } } src/com/android/deskclock/provider/Alarm.java +1 −1 Original line number Diff line number Diff line Loading @@ -86,7 +86,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { values.put(HOUR, alarm.hour); values.put(MINUTES, alarm.minutes); values.put(DAYS_OF_WEEK, alarm.daysOfWeek.getBitSet()); values.put(VIBRATE, alarm.vibrate); values.put(VIBRATE, alarm.vibrate ? 1 : 0); values.put(LABEL, alarm.label); values.put(DELETE_AFTER_USE, alarm.deleteAfterUse); if (alarm.alert == null) { Loading Loading
src/com/android/deskclock/AlarmClockFragment.java +9 −4 Original line number Diff line number Diff line Loading @@ -625,18 +625,23 @@ public class AlarmClockFragment extends DeskClockFragment implements private void launchRingTonePicker(Alarm alarm) { mSelectedAlarm = alarm; Uri oldRingtone = Alarm.NO_RINGTONE_URI.equals(alarm.alert) ? null : alarm.alert; final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, alarm.alert); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, oldRingtone); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false); startActivityForResult(intent, REQUEST_CODE_RINGTONE); } private void saveRingtoneUri(Intent intent) { final Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); if (uri == null) { uri = Alarm.NO_RINGTONE_URI; } mSelectedAlarm.alert = uri; // Save the last selected ringtone as the default for new alarms if (uri != null) { if (!Alarm.NO_RINGTONE_URI.equals(uri)) { RingtoneManager.setActualDefaultRingtoneUri( getActivity(), RingtoneManager.TYPE_ALARM, uri); } Loading Loading @@ -1252,7 +1257,7 @@ public class AlarmClockFragment extends DeskClockFragment implements }); final String ringtone; if (alarm.alert == null) { if (Alarm.NO_RINGTONE_URI.equals(alarm.alert)) { ringtone = mContext.getResources().getString(R.string.silent_alarm_summary); } else { ringtone = getRingToneTitle(alarm.alert); Loading
src/com/android/deskclock/DeskClock.java +5 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.view.View.OnTouchListener; import android.widget.PopupMenu; import android.widget.TextView; import com.android.deskclock.alarms.AlarmStateManager; import com.android.deskclock.provider.Alarm; import com.android.deskclock.stopwatch.StopwatchFragment; import com.android.deskclock.stopwatch.StopwatchService; Loading Loading @@ -175,6 +176,10 @@ public class DeskClock extends Activity implements LabelDialogFragment.TimerLabe } initViews(); setHomeTimeZone(); // We need to update the system next alarm time on app startup because the // user might have clear our data. AlarmStateManager.updateNextAlarm(this); } @Override Loading
src/com/android/deskclock/alarms/AlarmNotifications.java +8 −12 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ public final class AlarmNotifications { // Setup content action if instance is owned by alarm long alarmId = instance.mAlarmId == null ? Alarm.INVALID_ID : instance.mAlarmId; Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, instance.mAlarmId); Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, alarmId); viewAlarmIntent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX); viewAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); notification.setContentIntent(PendingIntent.getActivity(context, instance.hashCode(), Loading Loading @@ -118,7 +118,7 @@ public final class AlarmNotifications { // Setup content action if instance is owned by alarm long alarmId = instance.mAlarmId == null ? Alarm.INVALID_ID : instance.mAlarmId; Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, instance.mAlarmId); Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, alarmId); viewAlarmIntent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX); viewAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); notification.setContentIntent(PendingIntent.getActivity(context, instance.hashCode(), Loading Loading @@ -175,9 +175,7 @@ public final class AlarmNotifications { .setContentTitle(context.getString(R.string.alarm_missed_title)) .setContentText(contextText) .setSmallIcon(R.drawable.stat_notify_alarm) .setAutoCancel(true) .setPriority(Notification.PRIORITY_HIGH) .setDefaults(Notification.DEFAULT_ALL); .setPriority(Notification.PRIORITY_HIGH); // Setup dismiss intent Intent dismissIntent = AlarmStateManager.createStateChangeIntent(context, "DISMISS_TAG", Loading @@ -186,13 +184,11 @@ public final class AlarmNotifications { dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT)); // Setup content intent long alarmId = instance.mAlarmId == null ? Alarm.INVALID_ID : instance.mAlarmId; Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, alarmId); viewAlarmIntent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX); viewAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(viewAlarmIntent); notification.setContentIntent(PendingIntent.getActivity(context, instance.hashCode(), viewAlarmIntent, PendingIntent.FLAG_UPDATE_CURRENT)); Intent showAndDismiss = AlarmInstance.createIntent(context, AlarmStateManager.class, instance.mId); showAndDismiss.setAction(AlarmStateManager.SHOW_AND_DISMISS_ALARM_ACTION); notification.setContentIntent(PendingIntent.getBroadcast(context, instance.hashCode(), showAndDismiss, PendingIntent.FLAG_UPDATE_CURRENT)); nm.cancel(instance.hashCode()); nm.notify(instance.hashCode(), notification.build()); Loading
src/com/android/deskclock/alarms/AlarmStateManager.java +24 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.preference.PreferenceManager; import com.android.deskclock.AlarmAlertWakeLock; import com.android.deskclock.AlarmUtils; import com.android.deskclock.AsyncHandler; import com.android.deskclock.DeskClock; import com.android.deskclock.Log; import com.android.deskclock.SettingsActivity; import com.android.deskclock.Utils; Loading @@ -44,6 +45,9 @@ public final class AlarmStateManager extends BroadcastReceiver { // Intent action to trigger an instance state change. public static final String CHANGE_STATE_ACTION = "change_state"; // Intent action to show the alarm and dismiss the instance public static final String SHOW_AND_DISMISS_ALARM_ACTION = "show_and_dismiss_alarm"; // Extra key to set the desired state change. public static final String ALARM_STATE_EXTRA = "intent.extra.alarm.state"; Loading Loading @@ -416,6 +420,15 @@ public final class AlarmStateManager extends BroadcastReceiver { if (currentTime.after(missedTTL)) { // Alarm is so old, don't even show missed alarm setDismissState(context, instance); } else if (instance.mAlarmState == AlarmInstance.MISSED_STATE) { // Don't allow MISSED alarms to re-activate if (currentTime.before(alarmTime)) { // Get rid of the missed notification if the alarm time would be in // the future due to timezone changes setDismissState(context, instance); } else { setMissedState(context, instance); } } else if (currentTime.after(alarmTime)) { if (currentTime.before(timeoutTime)) { setFiredState(context, instance); Loading Loading @@ -536,6 +549,17 @@ public final class AlarmStateManager extends BroadcastReceiver { } else { registerInstance(context, instance, true); } } else if (SHOW_AND_DISMISS_ALARM_ACTION.equals(action)) { Uri uri = intent.getData(); AlarmInstance instance = AlarmInstance.getInstance(context.getContentResolver(), AlarmInstance.getId(uri)); long alarmId = instance.mAlarmId == null ? Alarm.INVALID_ID : instance.mAlarmId; Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, alarmId); viewAlarmIntent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX); viewAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(viewAlarmIntent); setDismissState(context, instance); } } }
src/com/android/deskclock/provider/Alarm.java +1 −1 Original line number Diff line number Diff line Loading @@ -86,7 +86,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { values.put(HOUR, alarm.hour); values.put(MINUTES, alarm.minutes); values.put(DAYS_OF_WEEK, alarm.daysOfWeek.getBitSet()); values.put(VIBRATE, alarm.vibrate); values.put(VIBRATE, alarm.vibrate ? 1 : 0); values.put(LABEL, alarm.label); values.put(DELETE_AFTER_USE, alarm.deleteAfterUse); if (alarm.alert == null) { Loading