今天对闹钟的提醒功能等进行了完善,继续解决之前的问题:
public class SnoozeActivity extends AppCompatActivity implements OnReminderPickedListener {
private Note note;
private Note[] notes;
public static void setNextRecurrentReminder(Note note) {
if (!TextUtils.isEmpty(note.getRecurrenceRule())) {
long nextReminder = RecurrenceHelper.nextReminderFromRecurrenceRule(Long.parseLong(note.getAlarm()), note
.getRecurrenceRule());
if (nextReminder > 0) {
updateNoteReminder(nextReminder, note, true);
}
} else {
new SaveNoteTask(false).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, note);
}
}
private static void updateNoteReminder(long reminder, Note note) {
updateNoteReminder(reminder, note, false);
}
private static void updateNoteReminder(long reminder, Note noteToUpdate, boolean updateNote) {
if (updateNote) {
noteToUpdate.setAlarm(reminder);
new SaveNoteTask(false).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, noteToUpdate);
} else {
ReminderHelper.addReminder(OmniNotes.getAppContext(), noteToUpdate, reminder);
ReminderHelper.showReminderMessage(noteToUpdate.getAlarm());
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().getParcelableExtra(INTENT_NOTE) != null) {
note = getIntent().getParcelableExtra(INTENT_NOTE);
manageNotification(getSharedPreferences(PREFS_NAME, MODE_MULTI_PROCESS));
} else {
Object[] notesObjs = (Object[]) getIntent().getExtras().get(INTENT_NOTE);
notes = Arrays.copyOf(notesObjs, notesObjs.length, Note[].class);
postpone(getSharedPreferences(PREFS_NAME, MODE_MULTI_PROCESS), DateUtils.getNextMinute(), null);
}
}
private void manageNotification(SharedPreferences prefs) {
if (ACTION_DISMISS.equals(getIntent().getAction())) {
setNextRecurrentReminder(note);
finish();
} else if (ACTION_SNOOZE.equals(getIntent().getAction())) {
String snoozeDelay = prefs.getString("settings_notification_snooze_delay", PREF_SNOOZE_DEFAULT);
long newReminder = Calendar.getInstance().getTimeInMillis() + Integer.parseInt(snoozeDelay) * 60 * 1000;
updateNoteReminder(newReminder, note);
finish();
} else if (ACTION_POSTPONE.equals(getIntent().getAction())) {
postpone(prefs, Long.parseLong(note.getAlarm()), note.getRecurrenceRule());
} else {
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra(INTENT_KEY, note.get_id());
intent.setAction(ACTION_NOTIFICATION_CLICK);
startActivity(intent);
finish();
}
removeNotification(note);
}
private void postpone(SharedPreferences prefs, Long alarm, String recurrenceRule) {
ReminderPickers reminderPicker = new ReminderPickers(this, this);
reminderPicker.pick(alarm, recurrenceRule);
}
private void removeNotification(Note note) {
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancel(String.valueOf(note.get_id()), 0);
}
@Override
public void onReminderPicked(long reminder) {
if (note != null) {
note.setAlarm(reminder);
} else {
for (Note currentNote : notes) {
currentNote.setAlarm(reminder);
}
}
}
@Override
public void onRecurrenceReminderPicked(String recurrenceRule) {
if (note != null) {
note.setRecurrenceRule(recurrenceRule);
setNextRecurrentReminder(note);
} else {
for (Note processedNotes : notes) {
processedNotes.setRecurrenceRule(recurrenceRule);
setNextRecurrentReminder(processedNotes);
}
setResult(RESULT_OK, getIntent());
}
finish();
}
}