protected Alarm mAlarm;
private int mVolumeBehavior;
- // Receives the ALARM_KILLED action from the AlarmKlaxon.
+ // Receives the ALARM_KILLED action from the AlarmKlaxon,
+ // and also ALARM_SNOOZE_ACTION / ALARM_DISMISS_ACTION from other applications
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- Alarm alarm = intent.getParcelableExtra(Alarms.ALARM_INTENT_EXTRA);
- if (alarm != null && mAlarm.id == alarm.id) {
- dismiss(true);
+ String action = intent.getAction();
+ if (action.equals(Alarms.ALARM_SNOOZE_ACTION)) {
+ snooze();
+ } else if (action.equals(Alarms.ALARM_DISMISS_ACTION)) {
+ dismiss(false);
+ } else {
+ Alarm alarm = intent.getParcelableExtra(Alarms.ALARM_INTENT_EXTRA);
+ if (alarm != null && mAlarm.id == alarm.id) {
+ dismiss(true);
+ }
}
}
};
// subclass.
if (!getIntent().getBooleanExtra(SCREEN_OFF, false)) {
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
- | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
+ | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
}
updateLayout();
- // Register to get the alarm killed intent.
- registerReceiver(mReceiver, new IntentFilter(Alarms.ALARM_KILLED));
+ // Register to get the alarm killed/snooze/dismiss intent.
+ IntentFilter filter = new IntentFilter(Alarms.ALARM_KILLED);
+ filter.addAction(Alarms.ALARM_SNOOZE_ACTION);
+ filter.addAction(Alarms.ALARM_DISMISS_ACTION);
+ registerReceiver(mReceiver, filter);
}
private void setTitle() {
// Attempt to snooze this alert.
private void snooze() {
+ // Do not snooze if the snooze button is disabled.
+ if (!findViewById(R.id.snooze).isEnabled()) {
+ dismiss(false);
+ return;
+ }
final String snooze =
PreferenceManager.getDefaultSharedPreferences(this)
.getString(SettingsActivity.KEY_ALARM_SNOOZE, DEFAULT_SNOOZE);
// Dismiss the alarm.
private void dismiss(boolean killed) {
+ Log.i(killed ? "Alarm killed" : "Alarm dismissed by user");
// The service told us that the alarm has been killed, do not modify
// the notification or stop the service.
if (!killed) {
}
@Override
+ protected void onResume() {
+ super.onResume();
+ // If the alarm was deleted at some point, disable snooze.
+ if (Alarms.getAlarm(getContentResolver(), mAlarm.id) == null) {
+ Button snooze = (Button) findViewById(R.id.snooze);
+ snooze.setEnabled(false);
+ }
+ }
+
+ @Override
protected void onStop() {
super.onStop();
if (!isFinishing()) {